Contare occorrenze in stringa

di il
1 risposte

Contare occorrenze in stringa

Ho sviluppato questo algoritmo che conta le occorrenze di un carattere immesso da tastiera in una stringa immessa da tastiera, attraverso una funzione esterna al main.

Ho un problema nel caso in cui immetto parole che iniziano con il carattere cercato, in output ho un numero di occorrenze diminuito di uno.
Es : se scrivo ala come numero di occorrenze della lettera 'a' me ne da 1
mentre se scrivo colo il numero di occorrenze della lettera 'o' viene 2.
Potreste farmi capire cosa sbaglio?

un'ultima cosa nel momento in cui introduco da tastiera il carattere da cercare
e chiamo la scanf in questo modo scanf("%c", &ch) il programma va in loop oppure esce.
Grazie


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int conta (char stringa [], int N, char c);
int main () {
char st[100];
char ch;
int lunghezza;
printf("inserisci stringa\n");
scanf("%s", st);
lunghezza = strlen(st);
printf("Lunghezza stringa %d", lunghezza);
printf("\n");
printf ("inserisci carattere da ricercare\n");
// se passo a scanf il formato carattere l'algoritmo va in loop
scanf("%s", &ch);

printf("%d", conta(st, lunghezza, ch));
system ("pause");
return 0;
}

int conta (char stringa [], int N, char c ) {
int i;
i=0;
int j=0;
for (i = 0; i<N; i++) {
if (stringa == c)
j++;
}
return j;
}

1 Risposte

  • Re: Contare occorrenze in stringa

    Dopo l'acquisizione della stringa svuota il buffer di input con
    while(getchar() != '\n');
    perche è rimasto ancora il carattere new line ('\n')
    Poi usa %c per il carattere ch e non %s.
    In conslusione con le modifiche
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    int conta (char stringa [], int N, char c);
    
    int main () 
    {
    	char st[100];
    	char ch;
    	int lunghezza;
    	printf("inserisci stringa\n");
    	scanf("%s", st);
    	while(getchar() != '\n');
    	lunghezza = strlen(st);
    	printf("Lunghezza stringa %d", lunghezza);
    	printf("\n");
    	printf ("inserisci carattere da ricercare\n");
    	// se passo a scanf il formato carattere l'algoritmo va in loop
    	scanf("%c", &ch);
    
    	printf("%d", conta(st, lunghezza, ch));
    	while(getchar() != '\n');
    	getchar();
    	return 0;
    }
    
    int conta (char stringa [], int N, char c ) 
    {
    	int i;
    	i=0;
    	int j=0;
    	for (i = 0; i<N; i++) 
    	{
    		if (stringa[i] == c)
    		j++;
    	}
    	return j;
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte