程序中这个 if (c >= 'A' && c <= 'Z' && a[c-'A'] == 0)
{
putchar(c);
a[c-'A'] = 1;
cnt++;}
这一步有些不懂(a[c-'A'] == 0)求帮忙
你这段代码的功能应该是:判断字符是否是大写英文字母并出现过,如果是没有出现过的大写字母,就执行{}中的语句。
if (c >= 'A' && c <= 'Z' && a[c-'A'] == 0)这句话中的执行顺序是从左到由,也就是说在执行a[c-'A'] == 0这一句的时候,c >= 'A' && c <= 'Z' 这两个条件是满足的。数组a应该是用来记录英文字母是否出现过,如果出现过,就是1,没出现过就是0.
int a[26]对应26个英文字母,a[0]表示‘A’是否出现过,a[1]表示'B'是否出现过,以此类推。
c-'A'就是取得c在数组a中的位置,比如,c='A'时,c-'A' = 0,a[c-'A']也就等价于a[0]。所以用 a[c-'A'] == 0这一句能够判断c是否已经出现过。这里的'A'不能用其他字母代替。
在{}中的a[c-'A'] = 1这一句就表示,c已经出现过(上面putchar(c)输出了),那么把它在数组中对应的值设为1。
c-‘A’ 就是将这个字符转换成 0-26对应的数字
比如c=‘A’ ,那么 c-'A'=0,其实字母A是第一个英文字母的意思
m0_63799123
2021-11-16 22:07
#include<stdio.h>
int main()
{
int cnt = 0, a[26] = {0};
char c;
while ((c = getchar()) != '
')
{
if (c >= 'A' && c <= 'Z' && a[c-'A'] == 0)
{
putchar(c);
a[c-'A'] = 1;
cnt++;
}
}
if (cnt == 0)
printf("Not Found
");
return 0;
}那么该语句在这个程序中具体有么作用,‘A能否换
其他字母