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++)
基本上,如果在条件语句中使用了任何表达式,则检查该值是否为布尔值 - 真或假。如果它不是布尔值 - 说它是一个整数类型,那么 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,因此它的计算结果为 true 并且if
将被输入。
如果相反,你有
char c = 0;
或者
char c = '\0';
然后 c 评估为 0。因此 if(c) 评估为 false 并且未输入 if。
您可以将相同的逻辑扩展到 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' 的次数。
只有当计数数组的每个成员都初始化到0
某个地方(或者它们是全局的)时,它才会起作用。
考虑
str1[] = "ABAB";
count[str1[0]]
与count['A']
which 相同count[65]
(如果 char set 是 ascii)。
将++
导致 count['A'] 变为 1
当i
变为 1 时,count[str1[1]]++
导致count['B']
变为 1.
i
= 2,然后count['A']
变为 2.
i
= 3,然后count['B']
变为 2。