gpt4 book ai didi

c - 不理解这个陌生的语法 : arr1[ arr2[i] - 'a' ]++

转载 作者:行者123 更新时间:2023-12-05 09:05:41 24 4
gpt4 key购买 nike

我正在查看一个程序,它可以找到输入字符串的频率。比较是根据字符串的 ASCII 值与小写字母“a”的 ASCII 值进行的。我已经实现了;它可以工作,尽管有一个错误,但本质上,我不知道特定的代码行;

for (int i = 0; i < strlen(arr2); i++)
{
// this line...
arr1[ arr2[i] - 'a' ]++;
}

arr1 是 arr1[26] = {0},也就是说,字母表中的所有字母都被分配了一个索引,数组被初始化为零,而 arr2[] 作为函数参数,接收标准输入。

这行神秘的代码是如何工作的,它在说什么?

完整代码:

#include <stdio.h>
#include <string.h>

#define ALEPH 26

void freq(char arr2[]);

int main ()
{
char * str;

printf("\nCharacter Frequency\n"
"--------------------\n");

// user input
printf("\nEnter a string of characters:\n");
fgets(str, ALEPH, stdin);

freq(str);

return 0;
}

// Function Definiton
void freq (char arr2[])
{
// array for ascii characters initialised to 0
int arr1[ALEPH] = {0};

// scan and cycle through the input array
for (int i = 0; i < strlen(arr2); i++)
{
arr1[ arr2[i] - 'a' ]++;
}

for (int j = 0; j < 26; j++)
{
if ( arr1[j] != 0 )
{
printf("\nCharacter: %c - Frequency: %d", 'a'+j, arr1[j]);
}
}
printf("\n");
}

最佳答案

arr1 是一个由 26 个 int 组成的数组,初始化为 0。其元素的索引是 0..25

arr2 被假定为仅由小写字母 'a'..'z' 组成的字符串。假定字符使用一种编码,其中小写字母是单字节且值是连续的,例如 ASCII(其中 a=97, ..., z=122).与这些假设不匹配的任何其他内容都将导致此代码中出现未定义的行为

代码循环遍历 arr2,对于每个字符,通过减去 'a' 的数值(即 ASCII 97) 来自字符的数值:

'a' - 'a' = 97 - 97 = 0
'b' - 'a' = 98 - 97 = 1
...
'z' - 'a' = 122 - 97 = 25

然后代码访问该索引处的 arr1 元素,并将该元素的值递增 1。

关于c - 不理解这个陌生的语法 : arr1[ arr2[i] - 'a' ]++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66897452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com