Array元素作为不同数组的索引

时间:2013-08-20 09:40:06

标签: c arrays string permutation

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

 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,这是字母表集。是吗?

3 个答案:

答案 0 :(得分:2)

char中的每个s[]都有一个unsigned int值(通常是ascii值),包含在0255之间。 array_count[]memset初始化为全零。然后,通过s[]循环中的i从开始到结束迭代for,每个char的值用于索引到array_count[]并增加这是++的价值。因此,您可以计算char中的s[]值。

答案 1 :(得分:2)

代码保持一个直方图,表示给定字符出现在字符串中的次数。每次字符出现在字符串中时,与该字符的ASCII值对应的数组元素将增加1。

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]中的两个'a'"aloha"将为2;由于array_count [0]末尾的NUL字符,"aloha"将为1;你可以弄清楚阵列的其余部分(主要是零)。

答案 2 :(得分: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



}