2017-11-30 14 views
0

私はこのコードを持っており、単語を並べ替えて使用する文字を数え、count [26]という1つの配列に追加しようとしています。それは小文字を数えるために機能しますが、大文字は数えません。大文字と小文字を一緒に数えるためには何が必要ですか。大文字と小文字を区別する

/*                    
* Search through each character in s,           
* which is array containing n strings,           
* and update the global count array            
* with the correct character counts.           
* Note: check the examples to see            
* if the counts should be case             
* sensitive or case insensitive.            
*/ 
void letterCount(char * s[], int n){ 
    //Implement this function              
    int c = 0,x,i; 
    char p = 'a', j = 'z'; 
    while (c<n) { 
    for(i=0;s[c][i]!='\0';i++) 
     if ((s[c][i] >= p && s[c][i] <= j)){ 
     x = s[c][i] - 'a'; 
     count[x]++; 
     } 
     c++; 
    } 
} 

例:

"BcdaADc" 

A = 2 
B = 1 
C = 2 
D = 2 
E = 0 
etc. 
+1

これは、** ctype.h **で既に提供されている機能を利用するのに適しているのでしょうか?つまり、islower関数とisupper関数です。 ;) – enhzflep

答えて

1

あなたは大文字をチェックするためにあなたのためのループ内の第二の "if" の場合に必要です。あなたは大文字の範囲

char p = 'a', j = 'z'; 

にPとjを初期化しているそして、あなたは「」

x = s[c][i] - 'a'; 

今大文字で同じことを行うと小文字を減算することにより、最終的な配列内の文字のインデックスを決定します!覚えておいてください、大文字はASCII values

全く異なっているので、いくつかの文字を初期化します。

char uppercaseA = 'A', uppercaseZ = 'Z'; 

があれば二ステートメントを追加(またはステートメント場合は、最初と組み合わせる):

else if ((s[c][i] >= uppercaseA && s[c][i] <= uppercaseZ)){ 

とあなたを更新カウント!

x = s[c][i] - uppercaseA; 
count[x]++ 

PS:より良い変数名を選んでください。 sとは何ですか? pとは何ですか? jとは何ですか?このコードは非常に読みにくいので、あなた自身と他の人の両方にとって、論理的に理解することは困難です!

+2

あなたは素晴らしいです、それは働いた。また、変数の命名については正しいですが、実際にはそれを行う必要があります。 – tbreck11

関連する問題