-4

この行がどのように機能するのか、この行には疑問がありflag[str[i]-'a']++;ます。完全なプログラムについては、 http://www.programmingsimplified.com/c/source-code/c-anagram-program をご覧ください。

char str[44];  
int flag[26],i=0;
gets(str);  
while(str[i]!='\0')
{
   flag[str[i]-'a']++; // How this line work
   i++;
}
i=0;
while(str[i]!='\0')
{
   printf("\n%d, %d ",str[i]-'a');
   i++;                        
}
4

4 に答える 4

4

小文字の 'a' は 10 進数の 97 に解決されます。97 を減算すると、基本的に文字 'a'、'b'、'c' などをflag配列のインデックスとして使用できます。それを++取得すると、配列内の適切な文字スロットがインクリメントされます。

文字flag[0]flag[1]a」、文字「b」なども同様です。

于 2013-09-16T05:04:00.310 に答える
1
flag[str[i]-'a']++;   

ポスト インクリメント フラグ [someindex] 値

someindex 値は str[i]-'a' とカウントされます

if str[i]='c' then   
someindex='c'-'a'   ==> someindex=2  

ポストインクリメントフラグ[2];

于 2013-09-16T05:04:09.130 に答える
0

プログラムの残りの部分を実際に解析せずに...次のようflag[str[i]-'a']++に変換します。

  • str[i]を取り、 から減算し'a'ます。 'a'ASCII では 97 に解決されるため、値が何であれ、str[i]それを 97 から減算します。

  • 差の結果を取得し、それをflag配列へのインデックスとして使用します。

  • 前の 2 つの手順で決定された結果の値のポストインクリメント操作を適用します。

于 2013-09-16T05:05:41.113 に答える