在下面的代码中,str1[i] && str2[i];
和count1[str1[i]]++;
语句到底是做什么的?
char str1[4]="rate";
char str2[4]="tear";
int count1[256] ;
int count2[256] ;
int i=0;
for (i = 0; str1[i] && str2[i]; i++)
{
count1[str1[i]]++;//count1['g']++what does that mean ?
count2[str2[i]]++;
}
答案 0 :(得分:10)
for (i = 0; str1[i] && str2[i]; i++)
与
相同for (i = 0; (str1[i] != 0) && (str2[i] != 0); i++)
与
相同for (i = 0; (str1[i] != '\0') && (str2[i] != '\0'; i++)
基本上,如果在条件语句中使用任何表达式,则检查该值是否为boolean - true或false。如果它不是布尔值 - 说它是一个整数类型,那么0是false
其他任何东西都是true
。
此处str[i]
是char
- 这是一个整数类型。因此,如果str [i]为0,则其计算结果为false,否则计算结果为true。
例如。
char c = 'A';
if(c)
与
相同if (c != 0)
与
相同if (c != '\0')
c是'A'(在ascii中是65)。 65!= 0,因此它评估为真&将输入if
。
如果相反,你有
char c = 0;
或
char c = '\0';
然后c评估为0.因此,如果(c)评估为假&如果没有输入。
您可以将相同的逻辑扩展为str [i],即char
。
如果您有str1[]="rate"
,则与...相同
str1[0] = 'r', str1[1] = 'a', str1[2] = 't', str1[3] = 'e', str1[4] = 0
。
关于count1[str1[i]]++;
这是每个角色出现次数的计数 - 例如。如果char集是ascii,那么在字符串遍历结束时,count ['A'](与count [65]相同)将包含字符串中出现'A'的次数。
仅当count数组的每个成员在某处(或者它们是全局的)初始化为0
时,它才会起作用。
考虑
str1[] = "ABAB";
count[str1[0]]
与count['A']
相同,与count[65]
相同(如果char设置为ascii)。
++
会导致计数['A']变为1
当i
变为1时,count[str1[1]]++
会导致count['B']
变为1。
i
= 2,然后count['A']
变为2。
i
= 3,然后count['B']
变为2。
答案 1 :(得分:3)
此算法同时计算两个字符串中每个ascii字符的出现次数。
str1[i] && str2[i]
检查是否到达了两个字符串的末尾。 count1[str1[i]]++
增加字符str1 [i]的出现次数。
答案 2 :(得分:2)
&&应用于2个字符,而不是字符串。在这种情况下,它检查两个字符都不是空字符。
答案 3 :(得分:1)
for (i = 0; str1[i] && str2[i]; i++)
循环运行时间较短的字符串长度
因为'\ 0'的ASCII值为零(0),str1 [i]或str2 [i]为零意味着零和循环结束