Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Si scriva un programma C che:
- a. Acquisisca una stringa di massimo N caratteri (con N valore costante)
- b. Ne manipoli il contenuto
- i. Trasformando tutte le lettere minuscole in maiuscole
- ii. Rimpiazzando tutti i caratteri non alfanumerici con il carattere ‘_’
- iii. Sostituendo i caratteri numerici con il carattere ‘*’
- c. Scandisca la stringa manipolata per contare quante parole sono
- presenti al suo interno, considerando una o più occorrenze del
- carattere ‘_’ come separatore tra parole.
- extra info sulle funzioni impiegate (by LOX):
- http://www.tutorialspoint.com/c_standard_library/ctype_h.htm
- http://www.tutorialspoint.com/c_standard_library/string_h.htm
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #define N 1024
- int main()
- {
- int i, max=0, P, p, k;
- char risp='s', a;
- char stringa[N+1];
- char pstringa[N+1];
- /*Inizio/reinizio esercizio*/
- while(risp=='s'){
- P=0;
- /*Carico caratteri*/
- printf("\nInserisci una frase di massimo %d caratteri\n", N);
- for(i=0; (stringa[i]=getchar())!='\n'; i++);
- stringa[i]='\0';
- printf("\nelementi immessi:\n");
- printf("%s", stringa);
- /*trova la lunghezza max della stringa*/
- max=strlen(stringa);
- /*manipolazione contenuto*/
- for(i=0; i<max; i++){
- /*converte minuscole in maiuscole*/
- if(islower(stringa[i])) stringa[i]= toupper (stringa[i]);
- /*sostituisce caratteri alfanumerici con '_' */
- else if(!isalnum(stringa[i])) stringa[i]='_';
- /*sostituisce i caratteri numerici con '*' */
- if(isdigit(stringa[i])) stringa[i]='*';
- }
- /*conta le parole*/
- for(i=0, k=0; i<max; ){
- /*salta caratteri '*' */
- while(stringa[i]=='*'){ i++; p++;}
- /*salta alla fine dei caratteri '_' */
- if(stringa[i]=='_'){
- while(stringa[i]=='_') i++;
- if(pstringa[k-1]!='_') { //evita due _ di fila
- pstringa[k]=stringa[i-1];
- if(isalpha(pstringa[k-1]))P++; //conta le parole contando
- k++; //_ ma evita di farlo 2
- } //volte se in mezzo c'è un *
- }
- /*copia carattere per carattere e salta alla fine della parola*/
- if(isalpha(stringa[i])){
- while(isalpha(stringa[i])) {pstringa[k]=stringa[i]; i++; k++;}
- if(P==0) P++;
- }
- }
- if(pstringa[k-1]=='_'){ //se l ultimo carattere è un _
- pstringa[k-1]='\0'; P--; //toglie una parola
- }
- else
- pstringa[k]='\0';
- printf("\nstringa composta da %d parole\n", P);
- printf("%s", pstringa);
- /*reiniziare*/
- printf("\nsi desidera reiniziare? (s = SI!)\n");
- scanf("%s", &risp);
- while(getchar()!='\n');
- if(risp=='s') system("cls");
- }
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement