2017-04-21 1 views
1

Ich versuche, meine Fähigkeiten in c, ich bin ein bisschen verwirrt, wenn es um verschiedene Möglichkeiten, das Auftreten von Buchstaben in einer Zeichenfolge mit einer Funktion Funktion zu berechnen kommt, würde Es ist großartig, verschiedene Ansichten zu erhalten, wie ich den Code verbessern könnte, oder eine neue Art zu zählen, wie oft ein Buchstabe in einer Zeichenkette mit einer Funktion auftritt.CountChars Array String Schleife Funktion Brief Vorkommen

Irgendwelche Ratschläge?

#include <stdio.h> 

int countingCharacters(char *message, int size, char charToBeCounted); 


int main() { 

    char arrMess[13] = { "hejsanSvejsan" }; 
    char charsToBeCounted = 'a'; 

    for (int i = 'a'; i <= 'z'; i++) { 

     printf("%c, %d:\n", charsToBeCounted, countingCharacters(arrMess, 13, charsToBeCounted)); 
     charsToBeCounted++; 

    } 
    getchar(); 
    return 0; 
} 

int countingCharacters(char *message, int size, char charToBeCounted) { 

    int counter = 0; 
    int i = 0; 

    while (i < size) 
    { 
     if (message[i] == charToBeCounted) 
      counter++; 
     i++; 
    } 
    return counter; 
} 
+2

Vielleicht [Code Review] (https://codereview.stackexchange.com/) wäre der richtige Ort, um diese Frage zu stellen. –

+0

'charsToBeCounted' ist unnötig, ich denke, es wäre klarer und schneller, obwohl es vernachlässigbar ist, um' i' einfach ein char zu machen. Abgesehen davon, dass Sie keinen Platz für einen Null-Terminator haben, wird eine harte Codierung der Größe den Code schwieriger zu ändern machen. Ich vermute, die Frage stellt sich meistens, gibt es einen schnelleren Weg, um die Anzahl der Male zu zählen, die ein Zeichen auftritt, leider in Bezug auf die Komplexität, gibt es nicht. 'int i = 'a'; i <= 'z'; 'ist gut, aber um pedantisch zu sein, glaube ich nicht, dass die Dezimalwerte von 'a' bis 'z' in der Reihenfolge und zusammenhängend sein müssen, die einzige wirkliche Lösung ist die Verwendung eines Arrays oder Bibliothek. – George

Antwort

0

können Sie ausgelassen size und überprüfen ‚\ 0‘ am Ende des Strings.

int countingCharacters(char *message, char charToBeCounted) { 
    int counter = 0; 
    while (message != '\0') 
    { 
     if (*message == charToBeCounted) 
      counter++; 
     message++; 
    } 
    return counter; 
} 
1

Wenn Ihr Code wird in der Zeichenfolge jeden Buchstaben (a bis z) zu zählen, können Sie ihm einen Durchgang tun und ein Array verwenden, um zu verfolgen, wie viele es von jedem ist. Etwas entlang der Linien von:

void countingCharacters(char *message, unsigned int count[]) { 
    while(*message) { 
     if(isalpha(*message)) { 
      count[tolower(*message)-'a']++; 
     } 
     message++; 
    } 
} 

int main() { 

    char arrMess[] = { "hejsanSvejsan" }; 
    char i; 
    unsigned int count[26] = { 0 }; 

    countingCharacters(arrMess,count); 
    for(i='a';i<='z';i++) { 
     printf("%c, %d:\n", i, count[i-'a']); 
    } 
    return 0; 
} 

Ich entfernte die harte Codierung der Größe von arrMess, nebenbei gesagt, weil es falsch war. Ihre Zeichenkette war 13 Zeichen lang, was zu groß wäre, um in ein Zeichenkettenarray der Größe 13 zu passen, da Sie am Ende 1 Zeile benötigen, um die '\0' zu speichern.

Verwandte Themen