Je sais que cette question a été posée plusieurs fois, mais je ne peux pas comprendre ce que je fais mal. Je demande à l'utilisateur d'entrer une chaîne, et compte le nombre de fois qu'un caractère apparaît dans la chaîne. Ceci est mon code:C compte le nombre d'occurrences dans la chaîne
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main()
{
char alphabetLower [26];
int alphabetLowerNumbers [26];
int alphabetUpperNumbers [5];
char userInput[30];
// store alphabet in array
for(int i =0; i < 26; i++)
{
char character = (97 + i);
alphabetLower[i] = character;
}
// assign alphabet number arrays to 0
for(int i=0; i < 5; i++)
{
alphabetLowerNumbers[i] = 0;
alphabetUpperNumbers[i] = 0;
}
puts("enter a string");
fgets(userInput, 30, stdin);
for(int i=0; i < 30; i++)
{
int ascii = userInput[i]; // ascii
alphabetLowerNumbers[ascii - 97]++;
}
for(int i=0; i < 26; i++)
{
printf("%c: ", alphabetLower[i]);
printf("%d\n", alphabetLowerNumbers[i]);
}
return 0;
}
Chaque fois que je l'exécute, il imprime le nombre d'occurrences jusqu'à la lettre « f ». Après cela, les résultats sont incorrects et pour certaines lettres, il imprime des nombres aléatoires. Quelqu'un peut-il me guider s'il vous plaît comment résoudre ce problème et m'expliquer ce que je fais mal? Merci.
enter a string
abc
a: 1
b: 1
c: 1
d: 0
e: 0
f: 32767
g: 1
h: 0
i: 1434561216
j: 32767
k: 206176841
l: 1
m: 1434561248
n: 32767
o: 1434561248
p: 32767
q: 1434561272
r: 32767
s: 171855872
t: 1
u: 0
v: 1
w: 206173472
x: 1
y: 206173376
z: 1
'for (int i = 0; i <5; i ++)' Pourquoi est-ce que vous ne initialisation jusqu'à 4? Ce qui semble correspondre à votre problème 'f'. – kaylum
@kaylum J'ai oublié de changer cela. Je testais le programme initialement avec 5 lettres. Merci. – rissandimo
@rissandimo Alors c'est votre problème ou pas? – kaylum