#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int calculate(char *target, char *data)
{
int count = 0;
char letters[26];
for (int i = 0; i < 26; ++i)
{
letters[i] = '\0'; //same as java ''
printf("%d : %c\n", i, letters[i] );
/* code */
}
for (int i = 0; i < target[i]; ++i)
{
letters[target[i] - 'A'] = target[i];
printf("%d : %c\n",i,target[i] );
/* code */
}
for (int i = 0; i < data[i]; ++i)
{
if(letters[data[i] - 'A'])
{
count++;
}
/* code */
}
return count;
}
int main(int argc, char const *argv[])
{
int result;
/* code */
char target[20];
char data[20];
printf("Enter the data\n");
scanf("%s", data);
printf("Enter the target\n");
scanf("%s", target);
result = calculate(target,data);
printf("%d\n",result );
return 0;
}
该示例程序的主要目的是检查数据中的相似单词并添加它们的出现次数。
例如
Target --> DOG
data --> GOAT
结果将等于 2,因为 O 和 G 在数据中出现一次,将它们相加得到 2
我的问题是,当到达第二个和第三个 for 循环时,我几乎不明白循环内部发生了什么target[i] - 'A'
除了目标索引被分配给字母
数组索引减去一个字符意味着什么或者这里的目的是什么?
减法A
将映射A
to 0
, B
to 1
等与 ASCII 字符集。
由于在 C 中数组索引是从零开始的,因此这实际上允许使用大写字母来确定数组元素的索引。
有一个限制,因为这种方法假设字母A
通过Z
在字符集中是连续的。该假设对于 ASCII 来说是正确的,但也存在不正确的真实标准化字符集,以及使用这些字符集的真实 C 编译器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)