我找到了一个显示字符串中字符频率的代码。具体地,
#include <stdio.h>
int main(){
char string[100];
int i, frequency[256] = {0};
printf("Enter a String\n");
gets(string);
for(i=0; string[i]!=0; i++){
frequency[string[i]]=frequency[string[i]]+1;
}
printf("\nCharacter Frequency\n");
for(i=0; i < 256; i++){
if(frequency[i] != 0){
printf("%5c%10d\n", i, frequency[i]);
}
}
return 0;
}
但是,我不明白这一点:
frequency[string[i]]=frequency[string[i]]+1;
它做什么?它是如何表现的?我相信string[i]
是frequency
的长度?但我不确定。
答案 0 :(得分:6)
此处,string[i]
的值充当数组frequency
的索引。
说
frequency[string[i]]=frequency[string[i]]+1;
您尝试将frequency[string[i]]
元素的值增加1。
这也可以重写为
frequency[string[i]]++;
话虽如此,
从不使用gets()
,严重时会遇到缓冲区溢出问题。请改用fgets()
。
int main()
至少应符合int main(void)
标准。
最好始终初始化您的本地变量,例如char string[100] = {0};
Link to the ASCII table,供您参考。
答案 1 :(得分:2)
char
值可用作数组索引。 string[i]
是char
,它在语句
frequency[string[i]]=frequency[string[i]]+1;
因此,如果string[i] = 'c'
及其在i
th 迭代的字符串中出现1
,则上述表达式将增加频率字符'c'
,即frequency[string[i]]
1
在这种情况下,frequency[string[i]]
相当于frequency['c']
,而frequency[99]
相当于99
,其中'c'
相当于{{1}} {{1}}。