Ciao,
devo fare un programma che inseriti una frase e una parola svolga a seconda della scelta dell'utente una delle seguenti opzioni:
1) Comunicare da quanti caratteri è composta la frase;
2) Comunicare da quante parole è composta la frase;
3) Comunicare il numero di volte in cui nella frase compare una parola scelta dall'utente.
Solo che per svolgere questo programma ho usato la 3 funzioni, che però mi danno degli errori, qualcuno potrebbe gentilmente spiegarmi dove e che cosa ho sbagliato (in quanto e da sole 2 settimane che le sto usando e ho ancora delle grandi lacune a riguardo)
codice:
int ncar (char); //Funzione che comunica da quante parole è composta la frase
int npar (char); //Funzione che conta il numero di volte che compare una parola in una frase
int nugua (char, char); //Funzione che conta il numero di volte che compare una parola in una frase
Vi posto anche il codice completo così da poter vedere come avevo pensato di svolgere tutto il programma
codice:
//Fare un programma che:
// 1) Comunicare da quanti caratteri è composta la frase;
// 2) Comunicare da quante parole è composta la frase;
// 3) Comunicare il numero di volte in cui nella frase compare una parola scelta dall'utente.
#include<stdio.h>
#include <string.h>
#include <ctype.h>
int ncar (char); //Funzione che comunica da quante parole è composta la frase
int npar (char); //Funzione che conta il numero di volte che compare una parola in una frase
int nugua (char, char);//Funzione che conta il numero di volte che compare una parola in una frase
int main()
{
char parola [25];
char frase [500];
int op=0, cnt=0; //'cnt' serve da contatore, 'op' serve come opzione dell'utente
printf("Scrivi una parola: \n");
fgets(parola, 25, stdin);
for(cnt=0; cnt < strlen(parola); cnt++)
{
parola[cnt]=toupper(parola[cnt]);
}
printf("Scrivi una frase: \n");
fgets(frase, 500, stdin); //La funzione fgets() legge una linea dallo stream immagazzinandola nel buffer puntato da s
for (cnt = 0; cnt < strlen(frase); cnt++) //strlen() - calcola la lunghezza di una stringa
{
frase[cnt]=toupper(frase[cnt]);
}
do
{
printf("Che cosa vuoi vedere?\n");
printf(" 1) Da quanti caratteri e\' composta la frase\n");
printf(" 2) Da quante parole e\' composta la frase\n");
printf(" 3) Il numero di volte in cui nella frase compare una parola scelta dall'utente\n");
scanf("%d", &op);
}
while(op!=1 && op!=2 && op!=3);
switch (op)
{
case 1:
printf("Il numero totale di caratteri da cui e\' composta la frase e\': %d", ncar(frase));
break;
case 2:
printf("Il numero di parole da cui e\' composta la frase e\': %d", npar(frase));
break;
default:
printf("Il numero di parole uguali nella frase e\': %d", nugua(parola, frase));
}
system("pause");
return 0;
}
//Implementazione della funzione che conta i caratteri
int ncar ( char frase1)
{
int cnt1=0, tot1=0;
for (cnt1 = 0; cnt1 < strlen(frase1); cnt1++) //strlen() - calcola la lunghezza di una stringa
{
if(frase1[cnt]!=' ')
tot1++;
}
return tot1;
}
//Implementazione della funzione che comunica da quante parole è composta la frase
int npar (char frase2)
{
int cnt2, tot2=0;
for (cnt2 = 1; cnt2 < strlen(frase2); cnt2++) //strlen() - calcola la lunghezza di una stringa
{
frase2[cnt2]=toupper(frase2[cnt2]);
if ((frase2[cnt2]>='A')&&(frase2[cnt2]<='Z')&&(!((frase2[cnt2-1]>='A')&&(frase2[cnt2-1]<='Z')))
tot2++;
}
if(frase2[0]==((frase2[cnt2]>='A')&&(frase2[cnt2]<='Z')))
tot2++;
return tot2;
}
//Implementazione della funzione che conta il numero di volte che compare una parola in una frase
int nugua (char pcer, char frase3)
{
int i=0, cnt3, tot3=0, tot4=0; //i serve da contatore, tot3 seve per contare i caratteri uguai, e tot4 serve per contare il numero di parole uguali
for(cnt3=0; cnt3 < strlen(pcer); cnt3++)
{
parola[cnt3]=toupper(pcer[cnt3]);
}
for (cnt3 = 1; cnt3 < strlen(frase3); cnt3++) //strlen() - calcola la lunghezza di una stringa
{
frase3[cnt3]=toupper(frase3[cnt3]);
if (strcmp(pcer[tot3],frase3[cnt3])==0)
{
tot3++;
if(tot3==strlen(pcer))
tot4++;
}
else
tot3=0;
}
return tot4;
}
Ciao e grazie mille in anticipo