私は、どの文字をどれだけ表示するか、ユーザーが選択した文にどれくらい表示するかを試みています。したがって、ユーザーが「Hello World!」を入力するとプログラムは1つのcharとそれが使用された回数を返すべきです。配列内の各文字の数をカウントします。
" SPACE:1, !:1, H:1, W:1, e:1, d:1, l:3, o:2, r:1,"
私は、ユーザーがから選択することができ、他の選択肢を持っているので、私はスイッチでそれを持っています。
今はどの文字が使用されているのか、SPACEからQまでの数はどれくらいあるのかを知ることができます。小文字もすべて手に入れることができますが、 'a'を読むと1 ' a 'と1つのスペース(ASCIIコードでは32から始まり、小文字が上がるにつれて上がります)。
これらは私が使用する変数です。
int menyval = 0, i, k = 0, h, j, count, count2;
char input, str[100], getridof, add, character;
これは私がこの場合持っているものです。
printf("Write a string not more then 50 chars:\n");
getchar();
i = 0;
j = 0;
count = 0;
int counts[50] = { 0 };
gets(str);
str[j] = str[i];
while (str[i] != '\0') {
if (str[i] >= 97 && str[i] <= 122) {
counts[str[i] - 97]++;
}
i++;
count++;
}
for (i = 0; i < 50; i++) {
if (counts[i] != 0) {
printf("%c: %d\n", i + 97, counts[i]);
}
}
while (str[j] != '\0') {
if (((str[j] >= 32 && str[j] <=96)) || ((str[j] >=123 && str[j] <= 126))) {
counts[str[j] - 32]++;
}
j++;
}
for (j = 0; j < 50; j++) {
if (counts[j] != 0) {
//if((j) < 127)
printf("%c: %d\n", j + 32, counts[j]);
}
}
printf("Total amount of char: %d\n", count);
str[i] = '\0';
system("pause");
system("cls");
これは学校の割り当てなので、あなたが直接コードを言いたくないが、いくつかのヒントが正しい方向に私を指すようにするために、私は非常にthankfullだろう場合、私は理解しています。
'gets()'を使わないでください.http://stackoverflow.com/questions/1694036/why-is-the-gets-function-so-dangerous-that-it-should-not-be-used – MrMuMu
あなたの 'counts'配列は' j'でループに格納しようとしている値の数を保持するのに十分な大きさではありません。配列には '50 'の整数スロットしかありませんが、それをはるかに越えてインデックスしています(' 96-32 = 64')。また、印刷してからもう一度それを使用しようとする間に配列をゼロに戻していません。私はあなたが実際にそれをしたいと思います。 – eddiem
マップを使用してクリーナーの実装を行うことができます。マップのドキュメントを確認してください。 – Ehsan