Advertisement
Dany1858

Esercizio 6.3 v3 (manipolare stringhe)

Sep 26th, 2014
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.25 KB | None | 0 0
  1. /*Si scriva un programma C che:
  2. a. Acquisisca una stringa di massimo N caratteri (con N valore costante)
  3. b. Ne manipoli il contenuto
  4.    i. Trasformando tutte le lettere minuscole in maiuscole
  5.    ii. Rimpiazzando tutti i caratteri non alfanumerici con il carattere ‘_’
  6.    iii. Sostituendo i caratteri numerici con il carattere ‘*’
  7. c. Scandisca la stringa manipolata per contare quante parole sono
  8. presenti al suo interno, considerando una o più occorrenze del
  9. carattere ‘_’ come separatore tra parole.
  10. extra info sulle funzioni impiegate (by LOX):
  11. http://www.tutorialspoint.com/c_standard_library/ctype_h.htm
  12. http://www.tutorialspoint.com/c_standard_library/string_h.htm
  13. */
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <ctype.h>
  18.  
  19. #define N 1024
  20.  
  21. int main()
  22. {
  23.   int i, max=0, P, p, k;
  24.   char risp='s', a;
  25.   char stringa[N+1];
  26.   char pstringa[N+1];
  27.  
  28.                   /*Inizio/reinizio esercizio*/
  29.   while(risp=='s'){
  30.   P=0;
  31.                   /*Carico caratteri*/
  32.   printf("\nInserisci una frase di massimo %d caratteri\n", N);
  33.   for(i=0; (stringa[i]=getchar())!='\n'; i++);
  34.   stringa[i]='\0';
  35.   printf("\nelementi immessi:\n");
  36.   printf("%s", stringa);
  37.  
  38.                   /*trova la lunghezza max della stringa*/
  39.   max=strlen(stringa);
  40.  
  41.                   /*manipolazione contenuto*/
  42.   for(i=0; i<max; i++){
  43.            
  44.                   /*converte minuscole in maiuscole*/
  45.         if(islower(stringa[i])) stringa[i]= toupper (stringa[i]);
  46.                  
  47.                   /*sostituisce caratteri alfanumerici con '_'          */
  48.         else if(!isalnum(stringa[i])) stringa[i]='_';
  49.  
  50.                   /*sostituisce i caratteri numerici con '*'            */
  51.         if(isdigit(stringa[i])) stringa[i]='*';
  52.   }
  53.        
  54.                   /*conta le parole*/
  55.   for(i=0, k=0; i<max; ){
  56.            
  57.                   /*salta caratteri '*'                                  */
  58.            while(stringa[i]=='*'){ i++; p++;}      
  59.                      
  60.                   /*salta alla fine dei caratteri '_'                    */
  61.            if(stringa[i]=='_'){
  62.                  while(stringa[i]=='_') i++;
  63.                  if(pstringa[k-1]!='_') {               //evita due _ di fila
  64.                      pstringa[k]=stringa[i-1];
  65.                      if(isalpha(pstringa[k-1]))P++;  //conta le parole contando
  66.                      k++;                           //_ ma evita di farlo 2
  67.                  }                                 //volte se in mezzo c'è un *
  68.            }
  69.            
  70.         /*copia carattere per carattere e salta alla fine della parola*/
  71.            if(isalpha(stringa[i])){
  72.                   while(isalpha(stringa[i])) {pstringa[k]=stringa[i]; i++; k++;}
  73.                   if(P==0) P++;
  74.            }
  75.   }
  76.   if(pstringa[k-1]=='_'){                         //se l ultimo carattere è un _
  77.         pstringa[k-1]='\0'; P--;                  //toglie una parola
  78.   }
  79.   else
  80.         pstringa[k]='\0';
  81.   printf("\nstringa composta da %d parole\n", P);              
  82.   printf("%s", pstringa);
  83.                   /*reiniziare*/
  84.   printf("\nsi desidera reiniziare? (s = SI!)\n");
  85.   scanf("%s", &risp);
  86.   while(getchar()!='\n');
  87.   if(risp=='s') system("cls");
  88.   }
  89.  
  90.   system("PAUSE"); 
  91.   return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement