0
votes

Comptage des chiffres de fréquence

J'essaie de trouver la fréquence de chiffre dans la chaîne donnée, qui contiennent du chiffre et des lettres. Lorsque j'exécute le même programme, je reçois un résultat différent, ressemblez à une sortie aléatoire. Où est le problème?

int main() {              

    char num[1001];
    int digit[10];
    int j,i;
    int count;
    scanf("%s",num);

    for(i=48;i<=57;i++)
    { 
      count = 0;
      for(j=0; num[j] != EOF;j++)
      {
        if(num[j] == i)
        {
          count++;
        }
      }
      printf("%d ",count);
    }

    return 0;
}

c

5 commentaires

Bonjour, Bienvenue à. Pourriez-vous nous fournir un ensemble d'entrées et de sortie?


Essayez d'imprimer la valeur du caractère où vous vous attendez à EOF et la valeur de eof .


Que se passe-t-il si vous changez la condition de boucle en num [j]! = '\ 0';


En outre, envisagez de changer la boucle sur 'pour (char ch =' 0 '; ch <=' 9 '; ch ++)'. Plus facile à lire vs 49. 57 constantes.


Au lieu de revenir et de compter à nouveau, on pourrait utiliser chiffre [10] pour placer le chiffre, ne nécessitant qu'un seul passage.


3 Réponses :


0
votes

Vous avez manqué un & dans la ligne avec scanf avant num . Le code correct doit être: xxx

Lorsque vous numérisez la valeur, vous devez fournir l'adresse de la variable. C'est vous laissez votre programme savoir où mettre la valeur. & num pointe vers l'adresse de la variable num . Mais si vous écrivez simplement scanf ("% s", num) Vous fournissez une valeur de la variable num , que vous ne vous souciez pas du tout. Vous écraserez cette valeur de toute façon.


à la fin de la chaîne, ordinateur met un caractère null \ 0 dont la valeur ASCII est 0, pour noter que cela est la fin de la chaîne. Genre de comme un '.' mais pour un ordinateur. Donc, vous vérifiez que vous trouviez le caractère nulle dans la boucle pour la boucle pour: num [j]! = '\ 0' [non EOF]


2 commentaires

Non ce n'est pas vrai. Le format % s dans scanf est le format unique qui ne veut pas que le & : vous passez dans la matrice et scanaf < / code> le remplit. Notez que num se désintègre dans un pointeur sur son premier élément lorsque vous le transmettez à une fonction.


Oh bien! Ma faute!! Je me souviens d'avoir oublié & dans mes codes et de recevoir des sorties gibberish. Je pensais que OP avait des problèmes similaires. Et j'ai sauté mon arme là-bas ... Merci d'avoir souligné. La fixant maintenant.



0
votes

On dirait que vous essayez de comparer un élément de char avec un type d'entier. Par exemple: xxx

J'ai couru votre code, et il semble que la sortie est la même donnée compte de la même entrée.

EDIT:

Nous voulions comparer un numéro à deux chiffres à un type de données de charme - qui est essentiellement un caractère - un numéro de chiffre .

lorsque nous prenons un numéro N et modulo par 10, nous obtenons le dernier chiffre, exemple:

48% 10 = 8

pour obtenir le premier chiffre que nous Divisez simplement par 10 et prenez le quotient, exemple:

48/10 = 4 (reste 8).

avec cette connaissance, nous pouvons comparer Le N-TH Char avec premier chiffre et le N + 1-TH Char avec le dernier (étant donné que nous comparons seulement deux chiffres, nous nous arrêterons à < Code> N + 1-TH ).

CONSEIL : Un chiffre de caractères peut être transformé en Int à l'aide de Char = Char - " / code> xxx


0 commentaires

0
votes

Je ne vois aucun problème ici, il semble que la sortie n'est pas lisible correctement alors essayez d'imprimer correctement comme

printf ("% c =>% d", i, compte);

Pour que vous puissiez lire quel nombre combien de fois. Si vous trouvez une fréquence incorrecte, Publiez l'entrée pour laquelle vous obtenez une sortie erronée.


0 commentaires