在这个程序中,这行如何工作“flag [str [i] - 'a'] ++;”谁有人解释一下?

时间:2013-09-16 05:00:32

标签: c arrays

我怀疑这一行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 个答案:

答案 0 :(得分:3)

小写'a'解析为十进制97.减去97基本上允许您使用字符'a','b','c'等作为flag数组的索引。一旦你有了,++正在递增数组中相应的字母槽。

所以flag[0]代表字母'a',flag[1]代表字母'b',依此类推。

答案 1 :(得分:1)

我猜你在str[i]中有一个小写字母,在这种情况下,str[i]-'a'将代表字母的数字,如

a=0
b=1
c=2
.
.
.

最后你有

flag[str[i]-'a']++;

所以它是一个字母数组,每次迭代递增当前字母的单元格,通常它计算每个字母出现的次数

例如,如果你有字符串“aaccdvb

你会得到:

str[0] = 2
str[1] = 1
str[2] = 2
str[3] = 1
str[21] = 1

其他所有都是0

答案 2 :(得分:0)

flag[str[i]-'a']++;   

后递增标志[someindex]值

someindex vale计算为str [i] - ' a'

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

后递增标志[2];

答案 3 :(得分:0)

没有真正解析程序的其余部分...... flag[str[i]-'a']++转换为:

  • 获取值str[i]并从'a'中减去它。 'a'以ASCII格式解析为97,因此您将获取str[i]中的任何值并从97中减去它。

  • 获取差异的结果并将其用作flag数组的索引。

  • 对前两步确定的结果值应用后递增操作。