Ich versuche zu zeigen, welches Zeichen und wie viele von ihnen jeweils in einem Satz, den der Benutzer wählen. Also, wenn der Benutzer "Hallo Welt!" Das Programm sollte ein Zeichen zurückgeben und die Anzahl, wie oft es verwendet wird.Zählen Sie, wie viele von jedem char in einem Array
" SPACE:1, !:1, H:1, W:1, e:1, d:1, l:3, o:2, r:1,"
Ich habe es in einem Schalter, weil ich andere Möglichkeiten haben, dass der Benutzer die Wahl zwischen.
Im Moment kann ich herausfinden, welche Char verwendet und wie viele von ihnen von SPACE zu Q. Ich kann auch alle kleinen Buchstaben raus, aber wenn es ein 'a' liest, wird es sagen, dass es 1 ' a 'und ein SPACE (im ASCII-Code beginnt es von 32 und geht nach oben, wenn die kleinen Buchstaben nach oben gehen).
Dies sind die Variablen, die ich verwende.
int menyval = 0, i, k = 0, h, j, count, count2;
char input, str[100], getridof, add, character;
Hier ist, was ich in diesem Fall habe.
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");
Dies ist eine Schulaufgabe, so verstehe ich, wenn Sie den direkten Code nicht sagen wollen, aber ich werde sehr dankbar für ein paar Hinweise mich in der richtigen Richtung zu weisen.
Verwenden Sie nicht 'gets()' .http: //stackoverflow.com/questions/1694036/why-is-the-gets-function-so- gefährliche- that-it-should-not-be-used – MrMuMu
Ihr Array "counts" ist nicht groß genug, um die Anzahl der Werte, die Sie in der Schleife speichern möchten, mit "j" zu speichern. Sie haben nur "50" Integer-Slots im Array, aber Sie indexieren weit darüber hinaus ('96-32 = 64'). Sie setzen das Array auch nicht zwischen dem Drucken und dem Versuch, es erneut zu verwenden, zurück. Ich nehme an, du willst das wirklich machen. – eddiem
Eine sauberere Implementierung kann mit einer Karte durchgeführt werden. Bitte überprüfen Sie die Kartendokumentation. – Ehsan