Visto che ormai sono state pubblicate tante versioni, compresa una corretta, pubblico la mia:
#include <stdio.h>
#define DIM 20
int analizzastringa(char s[], char c, int a)
{
int i = 0;
while(s[i])
{
a = a - (s[i++] == c);
}
return (!a);
}
int main()
{
char stringa[DIM] = {0};
FILE * fp;
if(!(fp = fopen("ciao.txt", "r")))
{
printf("Errore nell'apertura del file");
return 1;
}
while(fscanf(fp, "%s", stringa) != EOF)
{
if(analizzastringa(stringa, stringa[0], 1))
{
printf("%s ", stringa);
}
}
fclose(fp);
printf("\n");
return 0;
}
si può notare come scorro la stringa, senza un contatore
e come eseguo sia il de-conteggio dei caratteri che il test di restituzione
la parte di main invece è abbastanza banale
tutto questo per dire cosa?
non per fare la figura di quello bravo, non lo sono, anzi, sono un "programmatore giocattolo", ma per indicare che se si evita di sprecare tempo in interpretazioni sbagliate del testo e ci si concentra sulla consegna (e solo su quella) si può ottenere molto, la mia funzione non conta i caratteri, si limita a verificare che il loro numero corrisponda o no alla richiesta, che è "esattamente" la consegna
per lo OP: non credo che tu lo faccia apposta, ma hai dei "grossi" ma proprio "GROSSI" problemi a comprendere quello che leggi, devi applicarti di più, MOLTO di più
ah, già che ci sono, il programma di test per la funzione, sempre realizzare dei test per le funzioni che si scrivono, un'altro dei problemi dello OP è qui.
#include <stdio.h>
#include <string.h>
#define dim 20
int analizzastringa(char s[], char c, int a)
{
int i;
int len;
int conteggio = 0;
int risultato;
len = strlen(s);
for(i = 0; i < len; i++)
{
if(s[i] == c)
{
conteggio++;
}
}
if(conteggio <= a)
{
risultato = 1;
}
else
{
risultato = 0;
}
return risultato;
}
typedef struct
{
char parola[15];
char carattere ;
int numero;
} test;
test prove[] =
{
{{"unac"}, 'c', 1}
, {{"duecc"}, 'c', 1}
, {{"duecc"}, 'c', 2}
, {{"unav"}, 'c', 1}
, {{"trevvv"}, 'v', 1}
, {{"trevvv"}, 'v', 5}
};
#define dimensione sizeof(prove)/sizeof(test)
int main()
{
for(int i = 0; i < dimensione; i++)
{
printf("Controllo se in %s ci sono esattamente %d lettere %c:\n", prove[i].parola, prove[i].numero, prove[i].carattere);
if(analizzastringa(prove[i].parola, prove[i].carattere, prove[i].numero))
{
printf("Si', ci sono esattamente %d lettere %c\n", prove[i].numero, prove[i].carattere);
}
else
printf("No, non c'è il giusto numero di lettere %c\n", prove[i].carattere);
}
printf("\n");
return 0;
}
dove si notano due cose:
primi che lo OP non usa le maiuscole nelle macro, problema minore ma problema
secondo che ho dovuto aggiungere la libreria string.h
possibile che non gli sia mai nemmeno uscito un warning per l'uso di una funzione non inclusa?
evidentemente lo OP non prende in considerazione nulla di quello che noi o il compilatore gli dicono
compreso quando gli ho detto che i warning hanno la loro importanza......