/*ESERCIZIO 2  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
main()
{
/* esercizio 2 del capitolo 6 */
char  frase1[80],frase2[80];
int i,  OK=1;
printf("     Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase1[i]=getchar())!='\n') && (i < 80); i++);
frase1[i]='\0';
printf("     Dammi un'altra frase (non piu' di 80 char), e termina con carattere <cr>\n\n");
 for(i=0;((frase2[i]=getchar())!='\n') && (i < 80); i++);
frase2[i]='\0';

for (i=0; (OK && (i<5)); i++) if (frase1[i]!=frase2[i]) OK=0 ;
if ( OK ) {
for (i=0; i<5; i++) printf("%c",frase1[i]); printf("\n Primi 5 caratteri uguali\n");
}
else  printf("\n Primi 5 caratteri diversi\n");
}

/*ESERCIZIO 3  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 3 del capitolo 6 */
char  stringa1[] = "topino col ",
stringa2[] = "codino lungo", stringa3[6],
	stringa4[] = "gattino col ";
stringa3[5]='\0';
strncpy(stringa3, stringa2,5);
printf("\n %s\n",stringa3);
printf("\n %s\n",strcat(stringa1,stringa3)); 
printf("\n Altra possibilita', migliore\n"); 
printf("\n %s\n",strncat(stringa4,stringa2,5));
getchar();
}

/*ESERCIZIO 4  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/ 
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 4 del capitolo 6 */
char  frase1[80],frase2[80];
int i;
printf("Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase1[i]=getchar())!='\n') && (i < 80); i++);
frase1[i]='\0';
printf("     Dammi un'altra frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase2[i]=getchar())!='\n') && (i < 80); i++);
frase2[i]='\0';

if ( strncmp(frase1,frase2,5)==0 ) {
for (i=0; i<5; i++) printf("%c",frase1[i]); printf("\n Primi 5 caratteri uguali\n"); 
}
else  printf("\n Primi 5 caratteri diversi\n");
}

/*ESERCIZIO 5  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 5 del capitolo 6 */
char  frase1[80] = "1234567890abcdefghilmnopqrstuvzABCDEFGHILMNOPQRSTUVZ", 
      temp1[80], temp2[40], temp3[40],frase2[80];
int i,j,k ,pos_a,pos_A;
for(i=0;(frase1[i] != 'a') && (i < 80); i++);
pos_a = i;
for(j=pos_a;(frase1[j] != 'A') && (j < 80); j++);
pos_A = j;
temp1[pos_a] = '\0';
strncpy(temp1,frase1,pos_a);
j=0;
for (k=pos_a; (k<pos_A); k++){temp2[j]=frase1[k]; j++;}
temp2[j]='\0';
j=0;
for (k=pos_A; ((frase1[k]!= '\0') &&(k<80)); k++){temp3[j]=frase1[k]; j++;} temp3[j]='\0';
printf("\n temp1: %s", temp1);
printf("\n temp2: %s", temp2);
printf("\n temp3: %s", temp3);
strcat(temp2,temp1);
strcat(temp2,temp3);
printf("\n risultato: %s", temp2);
}

/*ESERCIZIO 6  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
main()
{
/* esercizio 6 del capitolo 6 (con scansione dell'input) */
char  frase[80]  ,
	parola1[10] ,
	parola2[10] ,
	frasefin[80];
int i,j,k,kk,OK,lunf,lunff,lunp1,lunp2;
printf("Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n");
for(i=0;((frase[i]=getchar())!='\n') && (i < 80); i++);
frase[i]='\0';
lunf=i;
printf("Dammi la parola che vuoi eliminare, non piu' di 10 char, termina con  <cr>\n\n");
for(i=0;((parola1[i]=getchar())!='\n') && (i < 10); i++);
parola1[i]='\0';
lunp1=i;
printf("Dammi la parola che vuoi inserire, non piu' di 10 char, termina con  <cr>\n\n");
for(i=0;((parola2[i]=getchar())!='\n') && (i < 10); i++);
parola2[i]='\0';
lunp2=i;
lunff=80;
j=0;
i=0;
while (i<=lunf) {		                             
		if (frase[i]==parola1[0]) {      /*ramo then*/
					OK=1;
for (k=0;(OK && (k<lunp1));k++) if (frase[i+k] != parola1[k]) OK=0; 
			if ( OK ) {	                  
				for (kk=0;(kk<lunp2)&&(j<lunff);kk++) { 
					frasefin[j]=parola2[kk];
					j=j+1;
				}                  
			i=i+lunp1;	       
		}		                                       
		else{	                   
			frasefin[j]=frase[i]; 
			i=i+1;
			j=j+1;
		}	 
         }              /*fine then dell'if esterno*/                
	else {  frasefin[j]=frase[i];i=i+1;j=j+1;
	}                       /*fine if esterno*/
}   /*fine corpo while*/
printf("\n frase iniziale:	 %s",frase);
printf("\n frase finale:	 %s",frasefin);
}

/*ESERCIZIO 6bis  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
main()
{
/* esercizio 6 del capitolo 6 (senza scansione dell'input) */
char  frase[] = "topino dal codino lucido, dal codino lungo, 
                 dal codino bigio", parola1[] = "codino",
		parola2[] = "pellame",
		frasefin[80];
int i,j,k,kk,OK,lunf,lunff,lunp1,lunp2;

i=0;
while (frase[i] != '\0') i++ ;
lunf=i;
printf("\n frase: %s\n",frase); printf("lunf=%d\n",lunf);
i=0;
while (i<80) {frasefin[i]='\0';i++ ;};
lunff=i;
printf("lunff=%d\n",lunff);
i=0;
while (parola1[i] != '\0') i++ ; lunp1=i;
printf("lunp1=%d\n",lunp1);
printf("\n parola1: %s\n",parola1);
i=0;
while (parola2[i] != '\0') i++ ; lunp2=i;
printf("lunp2=%d\n",lunp2);
printf("\n parola2: %s\n",parola2); j=0;
i=0;
while (i<=lunf) {		                             /*corpo while*/   
if (frase[i]==parola1[0]) {                        /*ramo then*/
						OK=1;
for (k=0;(OK && (k<lunp1));k++) 
                              if (frase[i+k] != parola1[k]) OK=0; if ( OK ) {
	                                for (kk=0;(kk<lunp2)&&(j<lunff);kk++)
					{                
		      			frasefin[j]=parola2[kk];
					j=j+1;
					}                  
					i=i+lunp1;	       
				}		                                       
				else{	                                        
						frasefin[j]=frase[i]; 
						i=i+1;
						j=j+1;
				}	                                        
			}	          /*fine then dell'if esterno*/                
			else {  frasefin[j]=frase[i];i=i+1;j=j+1;
			}                /*fine if esterno*/
	}/*fine corpo while*/
printf("\n frase: %s",frase);
printf("\n frasefin: %s",frasefin);
}

/*ESERCIZIO 7  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/ 
#include <stdio.h>
#include <string.h>
main()
{
/* esercizio 7 del capitolo 6 Palindrome*/
		char stringa[80];
		int i,j,k, test;
printf("			Palindrome \n\n");
printf("     Dammi una parola che termina con carattere <cr>\n\n");
for(i=0;((stringa[i]=getchar())!='\n') && (i < 80); i++); stringa[i]='\0';
printf(" \n ho letto %s: ", stringa);
test=1;
k=i-1;
for (j=0; (test && j<=(i-1)/2); j++) { test=(stringa[j]==stringa[k]);
		k=k-1;  
}
if (test) printf(" e' " );
else printf("  non e' " );
printf("palindroma\n");
}

/*ESERCIZIO 8  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 8 del capitolo 6 */
char  frase[80];
int i, lun, OK;
printf("     Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase[i]=getchar())!='\n') && (i < 80); i++);
frase[i]='\0';
lun=i;
OK=1;
for(i=0;(OK && (i<(lun-2)));i++)   
			if ((frase[i]==frase[i+1])&&(frase[i]==frase[i+2])) OK=0;
printf("\nNella frase");
if (OK) printf(" non");
printf(" compaiono tre caratteri uguali consecutivi\n");
}

/*ESERCIZIO 9  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 9 del capitolo 6 */
char  frase[80],ch;
int i,count;
printf("     Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase[i]=getchar())!='\n') && (i < 80); i++);
frase[i]='\0';

printf("     Dammi un carattere \n\n");
ch=getchar();
count=0;
for(i=0;i<80;i++) if (ch==frase[i]) count++;
printf("\n Il carattere %c occorre %d volte nella frase\n",ch,count);
}

/*ESERCIZIO 10  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 10 del capitolo 6 */
char  frase1[80],conta[26]; 
int contavocali=0,contaconsonanti=0,maxfreq=0,imax=0;
int i;
printf("Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n");
for(i=0;((frase1[i]=getchar())!='\n') && (i < 80); i++);
frase1[i]='\0';
for(i=0 ; (i<26) ;i++) conta[i]=0;
for(i=0 ; ((i<80) && (frase1[i]!='\0'));i++)
switch (frase1[i]){
case 'a': case 'A': conta[1]++; contavocali++;break;
case 'b': case 'B': conta[2]++; contaconsonanti++;break; 
case 'c': case 'C': conta[3]++;  contaconsonanti++;break; 
case 'd': case 'D': conta[4]++; contaconsonanti++;break;
case 'e': case 'E': conta[5]++; contavocali++;break; 
case 'f': case 'F': conta[6]++; contaconsonanti++;break; 
case 'g': case 'G': conta[7]++; contaconsonanti++;break; 
case 'h': case 'H': conta[8]++; contaconsonanti++;break; 
case 'i': case 'I': conta[9]++; contavocali++;break; 
case 'j': case 'J': conta[10]++; contaconsonanti++;break; 
case 'k': case 'K': conta[11]++; contaconsonanti++;break;
case 'l': case 'L': conta[12]++; contaconsonanti++;break; 
case 'm': case 'M': conta[13]++; contaconsonanti++;break; 
case 'n': case 'N': conta[14]++; contaconsonanti++;break; 
case 'o': case 'O': conta[15]++; contavocali++;break; 
case 'p': case 'P': conta[16]++; contaconsonanti++;break; 
case 'q': case 'Q': conta[17]++; contaconsonanti++;break; 
case 'r': case 'R': conta[18]++; contaconsonanti++;break; 
case 's': case 'S': conta[19]++; contaconsonanti++;break; 
case 't': case 'T': conta[20]++; contaconsonanti++;break; 
case 'u': case 'U': conta[21]++; contavocali++;break; 
case 'v': case 'V': conta[22]++; contaconsonanti++;break; 
case 'w': case 'W': conta[23]++; contaconsonanti++;break; 
case 'x': case 'X': conta[24]++; contaconsonanti++;break; 
case 'y': case 'Y': conta[25]++; contaconsonanti++;break;
case 'z': case 'Z': conta[26]++; contaconsonanti++;break; 
default:  break;
}
printf("\nLe occorrenze di vocali sono %d\n",contavocali); 
printf("\nLe occorrenze di consonanti sono %d\n",contaconsonanti); 
for(i=0 ; (i<26) ;i++) printf("\nLa lettera %d e' comparsa %d volte nella sequenza \n",i,conta[i]);
for(i=0 ; (i<26) ;i++) if (maxfreq<conta[i]) {maxfreq=conta[i];imax=i;};
printf("la lettera %d -esima e' la piu' frequente, con %d occorrenze\n", imax, maxfreq); 
}

/*ESERCIZIO 11  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 11 del capitolo 6 */
char  frase1[80],conta[10];
int i;
printf("Dammi una sequenza di cifre decimali (non piu' di 80), e termina con carattere <cr>\n\n"); 
for(i=0;((frase1[i]=getchar())!='\n') && (i < 80); i++);
frase1[i]='\0';
for(i=0 ; (i<10) ;i++) conta[i]=0;
for(i=0 ; ((i<80) && (frase1[i]!='\0'));i++)
switch (frase1[i]){
case '0': conta[0]++;break;
case '1': conta[1]++;break;
case '2': conta[2]++;break;
case '3': conta[3]++;break;
case '4': conta[4]++;break;
case '5': conta[5]++;break;
case '6': conta[6]++;break;
case '7': conta[7]++;break;
case '8': conta[8]++;break;
case '9': conta[9]++;break;
default:  break;
}
for(i=0 ; (i<10) ;i++) printf("\nLa cifra %d e' comparsa %d volte nella sequenza \n",i,conta[i]);
}

/*ESERCIZIO 12  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 12 del capitolo 6 */
char  frase1[80],frase2[80],ch;
int i;
printf("Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase1[i]=getchar())!='\n') && (i < 80); i++);
frase1[i]='\0';
for(i=0 ; ((i<80) && (frase1[i]!='\0'));i++)
switch (frase1[i]){
case 'a': frase2[i]='A';break;
case 'b': frase2[i]='B';break;
case 'c': frase2[i]='C';break;
case 'd': frase2[i]='D';break;
case 'e': frase2[i]='E';break;
case 'f': frase2[i]='F';break;
case 'g': frase2[i]='G';break;
case 'h': frase2[i]='H';break;
case 'i': frase2[i]='I';break;
case 'j': frase2[i]='J';break;
case 'k': frase2[i]='K';break;
case 'l': frase2[i]='L';break;
case 'm': frase2[i]='M';break;
case 'n': frase2[i]='N';break;
case 'o': frase2[i]='O';break;
case 'p': frase2[i]='P';break;
case 'q': frase2[i]='Q';break;
case 'r': frase2[i]='R';break;
case 's': frase2[i]='S';break;
case 't': frase2[i]='T';break;
case 'u': frase2[i]='U';break;
case 'v': frase2[i]='V';break;
case 'w': frase2[i]='W';break;
case 'x': frase2[i]='X';break;
case 'y': frase2[i]='Y';break;
case 'z': frase2[i]='Z';break; 
default:  frase2[i]=frase1[i];break;
}
frase2[i]='\0';
printf("\n%s\n",frase2);
}

/*ESERCIZIO 12bis  DEL CAPITOLO 6 DEL BELLINI_GUIDI*/ 
/********************************************/ 
/********************************************/
#include <stdio.h>
#include <string.h> 
main()
{
/* esercizio 12 del capitolo 6 seconda versione*/
char  frase1[80],frase2[80];
int i;
printf("Dammi una frase (non piu' di 80 char), e termina con carattere <cr>\n\n"); 
for(i=0;((frase1[i]=getchar())!='\n') && (i < 80); i++);
frase1[i]='\0';
for(i=0 ; ((i<80) && (frase1[i]!='\0'));i++)
if ((frase1[i]>='a')&&(frase1[i]<='z'))  frase2[i]=frase1[i]-'a'+'A';
	else frase2[i]=frase1[i];
frase2[i]='\0';
printf("\n%s\n",frase2);
}