2016-12-01 5 views
0

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.

+1

Verwenden Sie nicht 'gets()' .http: //stackoverflow.com/questions/1694036/why-is-the-gets-function-so- gefährliche- that-it-should-not-be-used – MrMuMu

+0

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

+0

Eine sauberere Implementierung kann mit einer Karte durchgeführt werden. Bitte überprüfen Sie die Kartendokumentation. – Ehsan

Antwort

1

ACII Tabelle: http://www.asciitable.com/

char str[12] = "hello world"; 

    // initialize an array of each possible character 
    int charCount[128]; 
    memset(charCount, 0, sizeof(charCount)); 

    // iterate through the array of characters 
    // incrementing the index in charCount matching the element in str 
    char* currChar = str; 
    while(*currChar) 
      ++charCount[*(currChar++)]; 

    // iterate through the array once more 
    for(int i = 0; i < 128; ++i) { 
      // if the character was found in the string, 
      // print it and its count 
      if(charCount[i]) { 
        printf("%c: %d\n",i,charCount[i]); 
      } 
    } 
1

ich wenig korrigiert und gelöscht Ihren eigenen Code in dieser Weise:

  1. Löschen Erklärung nicht verwendeten Variablen.
  2. Setzen aller Deklaration oben.
  3. Löschen unbrauchbar Befehle.
  4. Ändern "Magie" Zahlen als 65 und 97 auf die Symbole 'A', 'a' - ja, char s sind Zahlen.
  5. Putting Kommentare für einzelne Teile Ihres Codes. Und
  6. - natürlich - Korrektur von Fehlern, vor allem:
    1. Reseting Zählern,
    2. Spaltung diskontinuierlichen Reihe von Symbolen (|| in Ihrem ursprünglichen Zustand) in 2 kontinuierlichen.

So ist der vollständige Code ist jetzt:

#include <stdio.h> 

int main() { 
    int i, count = 0, counts[50] = { 0 }; 
    char str[100]; 

    printf("Write a string not more than 50 chars:\n"); 
    gets(str); 

    /* Counting capital letters and all symbols, too*/ 
    i = 0; 
    while (str[i] != '\0') { 
     if (str[i] >= 'A' && str[i] <= 'Z') { 
      counts[str[i] - 'A']++; 
     } 
     i++; 
     count++; 
    } 

    /* ... and printing results */ 
    for (i = 0; i < 50; i++) { 
     if (counts[i] != 0) { 
      printf("%c: %d\n", i + 'A', counts[i]); 
     } 
    } 

    /* ... and clear the counter */ 
    for (i = 0; i < 50; i++) 
     counts[i] = 0; 

    /* Counting small letters */ 
    i = 0; 
    while (str[i] != '\0') { 
     if (str[i] >= 'a' && str[i] <= 'z') { 
      counts[str[i] - 'a']++; 
     } 
     i++; 
    } 

    /* ... and printing results */ 
    for (i = 0; i < 50; i++) { 
     if (counts[i] != 0) { 
      printf("%c: %d\n", i + 'a', counts[i]); 
     } 
    } 

    /* ... and clear the counter */ 
    for (i = 0; i < 50; i++) 
     counts[i] = 0; 

    /* Counting symbols between SPACE and 'A' */ 
    i = 0; 
    while (str[i] != '\0') { 
     if ((str[i] >= ' ' && str[i] < 'A')) { 
      counts[str[i] - ' ']++; 
     } 
     i++; 
    } 

    /* ... and printing results */ 
    for (i = 0; i < 50; i++) { 
     if (counts[i] != 0) { 
      printf("%c: %d\n", i + ' ', counts[i]); 
     } 
    } 

    /* ... and clear the counter */ 
    for (i = 0; i < 50; i++) 
     counts[i] = 0; 

    /* Counting symbols over 'z' */ 
    i = 0; 
    while (str[i] != '\0') { 
     if ((str[i] >= 123 && str[i] <= 126)) { 
      counts[str[i] - 123]++; 
     } 
     i++; 
    } 

    /* ... and printing results */ 
    for (i = 0; i < 50; i++) { 
     if (counts[i] != 0) { 
      //if((i) < 127) 
      printf("%c: %d\n", i + 123, counts[i]); 
     } 
    } 


    printf("Total amount of char: %d\n", count); 
    str[i] = '\0'; 
    system("pause"); 
    system("cls"); 
    return 0; 
} 

ich es getestet und jetzt funktioniert es OK - trotz immer noch hässlich.Aber es ist dominant Ihr Code, so dass Sie verstehen es.

+0

Verwenden Sie nicht 'gets'. und lösche 'str [i] = '\ 0';' – BLUEPIXY

Verwandte Themen