0

我遇到了一些示例,其中数组基于来自不同数组的值进行索引。例子:

 char s[] = "aloha";
int l= strlen(s);
int array_count[256];
memset(array_count,0,256*sizeof(int));

for(int i=0;i<l;i++)
{
 array_count[s[i]]++;// What exactly happens in this statement ??
}

我理解它,因为它检查并将 s[] 中的字母设置为数组 array_count 中的 1,这是字母集。那正确吗 ?

4

3 回答 3

2

该代码保留了给定字符在字符串中出现的次数的直方图。字符串中每出现一个字符,对应于该字符的 ASCII 值的数组元素就加一。

中的元素array_count []都由0您的memset(). 然后你的循环遍历s[]. 所以在第一次迭代中:

array_count [s[i]]++   // first evaluate [i]
array_count [s[0]]++   // i is zero
array_count ['a']++    // s[0] is 'a'
array_count [97]++     // promotion of 'a' from char to int; ASCII value of 'a' is 97

array_count [97]因为 是零memset,所以因为++它增加为 1。

在随后的迭代中,其他角色也会发生类似的魔法。当循环终止时,array_count [97]将是 2 因为两个'a's in "aloha"; 由于;结尾的字符,array_count [0]将为 1 你可以弄清楚数组的其余部分是什么(大部分是零)。NUL"aloha"

于 2013-08-20T09:59:04.440 回答
2

每个charins[]都有一个unsigned int值(通常是 ascii 值),包含在0和之间255array_count[]由 初始化为全零memset。然后,通过在循环中从头到尾迭代,s[]每个的值用于索引并增加它的值 with 。因此,您可以计算.iforchararray_count[]++chars[]

于 2013-08-20T09:49:57.833 回答
0

256 是字符串中可能的字母。请参阅 ascii 表。

http://www.asciitable.com/

for(int i=0;i<l;i++) 
{ 
     array_count[s[i]]++;    // What exactly happens in this statement ?? 

for i=0

 s[i] = 'a'

ascii value of 'a' is 97

so it will increment arry_count[97] value from 0 to 1



}
于 2013-08-20T09:59:23.800 回答