2016-05-19 6 views
0

私はCプログラミングの初心者で、ユーザーが入力した文字列をアルファベット順にソートするプログラムを作成しようとしています。これまで私は以下のコードを持っています。誰も私がそれを正しく実行するために助けることができますか?コードはコンパイルされて実行されますが、実行中のカウントが正しく格納されていないようです。文字列内のアルファベットの文字列C

デバッグする限り、私はカウンタとしての文字の使用が問題になる可能性があることに気がつきましたが、これは他の場所で行われているのを見て、codeはコンパイルしてうまく動作します。前もって感謝します。

#include <stdio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
     char str[10], strout[10] ; 
     char letter ; 
     int letter_count[26] = {0} ; 
     int i, j , k, l, strlength ; 

     printf("Please enter a string and I'll sort it \n") ; 
     fgets(str, sizeof(str), stdin) ; 
     strlength = strlen(str) ; 

     for(i = 0 ; i < strlength ; i++) 
     { 
       if((str[i] >= 'A') && (str[i] <= 'Z')) 
       { 
         printf("Capital letter\n") ; 
         letter = str[i] - 'A' ; 
         letter_count[letter] = letter_count[l] + 1 ; 
         printf("Letter %c has a count of %d\n",str[i], letter_count[i]) ; 
       } 
       else if((str[i] >= 'a') && (str[i] <= 'z')) 
       { 
         printf("Lower case\n") ; 
         letter = str[i] - 'a' ; 
         letter_count[letter] = letter_count[l] + 1 ; 
         printf("Letter %c has a count of %d\n",str[i], letter_count[i]) ; 
       } 
     } 

     k = 0 ; 
     for(letter = 'a' ; letter <= 'z' ; letter++) 
     { 
       i = letter - 'a' ; 
       for(j = 0 ; j <= letter_count[i] ; j++) 
       { 
         strout[k] = letter ; 
         k++ ; 
       } 


     } 
     return 0 ; 
} 

答えて

1

あなたのコード内のいくつかのバグがあります

  1. forループ内で2回出現し、次の行が正しくありません:

    letter_count[letter] = letter_count[l] + 1 ; 
    

    変数lが初期化されることはありません。正しい は、たとえば、次のようになります。

    letter_count[letter]++; 
    
  2. 次も間違っている:手紙の

    printf("Letter %c has a count of %d\n",str[i], letter_count[i]) ; 
    

    カウントがletter_count[letter]ではなくletter_count[i]です。

  3. off-by-one errorは、終了条件ループである:

    for(j = 0 ; j <= letter_count[i] ; j++) 
    

    それはj < letter_count[i]に変更する必要がありそうでない場合は、あなたが必要以上に1時間以上各文字を数えます。

+0

ありがとう – James