2017-05-03 5 views
0

文字を数えてコードを改善しようとしました。たとえばwhileループを使う代わりにいくつかの変更を加えました。誰かが私のコードをより専門的で安価にするためにどのようにアドバイスを得たらいいですか?関数(周波数)を使って文字を数えよう

#include <stdio.h> 


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

int main() 
{ 
    char myString[] = "Hello World!"; 

    int size = strlen(myString); 

    char charToBeCounted = 'a'; 
    int i = 0; 
    int counter = 0; 


    while (myString[i] != '\0') 
    { 
     if (myString[i] == charToBeCounted) 
     { 
      counter++; 
     } 
     ++i; 
    } 

    for (int i = 'a'; i <= 'z'; i++) 
    { 
     printf("%c: %d\n", charToBeCounted, countingCharacters(myString, size, charToBeCounted)); 
     charToBeCounted++; 
    } 
    getchar(); 

    return 0; 
} 

int countingCharacters(char *message, int size, char charsToBeCounted) 
{ 
    int counter = 0; 

    for (int i = 0; i < size; i++) 
    { 
     if (message[i] == charsToBeCounted) 
     counter++; 
    } 

    return counter; 
} 
+0

「while」ループはなぜそこにありますか?どこでも 'counter 'を使用していません。 –

+0

「アドバイスをもっとプロフェッショナルかつ安価にするためにコードを改善する方法は?」 - > https://codereview.stackexchange.com - より良いサイトの選択を検討してください。 (これは正しく動作することを前提としています) – chux

+0

'countingCharacters()'には少なくとも4つの改良点があります。[codereview](https://codereview.stackexchange.com/)の作業用コードを投稿してください。 – chux

答えて

1

あなたはすべてを2回しています。最初にメインループの 。

while (myString[i]!='\0'){...} 

さらに、countingCharactersである。多くのリソースを無駄にする。

さらに、strlenを使用している場合は、while (myString[i]!='\0)を使用しないでください。それをfor (i=0;i<size;i++)に置き換えてください。あなたはsizeを見つけてそれを使用しないために投資しています。またstrlenを使用していないし、ちょうどFYI while (myString[i]!='\0')

の操作を行います。あなたは、等価的'\0'0を使用することができます(\0の整数値は0です)。

+1

'\ 0'は意味をよりよく伝えます。 –

+0

それは本当です。 「0」は指のほうが簡単です。 :P –

+0

'while(myString [i]!= '\ 0')'は、コードレビューやメンテナーの目には簡単ですが、[this](https://www.ncbi。 nlm.nih.gov/pmc/articles/PMC3610582/)。 'while(myString [i])'は簡潔な選択肢です。 – chux