2010-08-26 7 views
2

Supposons que je voudrais compter les caractères dans certains mFile comme ceci:comptage des caractères

while((c = getc(mFile)) != EOF){ 
    chars[c]++; 
    } 

Si j'essaie de leur montrer:

for(int f=0;f<256;f++) { 
    if(isprint(f) && chars[f]>0) 
     cout << (char)f << " " << (int)chars[f] << endl; 
    } 

Tous les caractères impriment bien. Mais si je

 cout << " " << (int)chars[32] << endl; 

Ensuite, il n'imprime pas le numéro ... juste une grande int, je suppose, parce qu'il est négatif. Qu'est-ce que je fais mal? Est-ce que getc se casse, ou ne compte pas les espaces?

Merci

+1

Quel est le type de 'chars'? –

+0

char chars [256] –

+0

C'est évidemment un programme simple. Cela vous tue-t-il de poster une version compilable qui montre le problème! –

Répondre

5

Sur la base de votre réponse à mon commentaire, je dirais que le problème est susceptible d'être que char est signé sur votre plate-forme, et vous avez plus de 127 espaces dans votre fichier d'entrée, donc chars[32] est emballage et devenir négatif. Pourquoi ne pas utiliser un type de taille plus appropriée pour vos compteurs?

+1

Exactement. Juste parce que les caractères de comptage de l'OP, ce n'est pas une raison pour stocker les chiffres dans les variables char. –