在下面的代码中,语句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]]++;
}
发布于 2013-01-01 16:59:19
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
--它是一个整型。所以如果stri是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。
您可以将相同的逻辑扩展到stri,它是一个char
。
如果你有str1[]="rate"
,它和str1[0] = 'r', str1[1] = 'a', str1[2] = 't', str1[3] = 'e', str1[4] = 0
是一样的。
关于count1[str1[i]]++;
它是每个字符出现的次数的计数-例如。如果字符集是ascii,那么在字符串遍历结束时,count'A'将包含字符串中出现'A‘的次数。
只有当计数数组的每个成员在某个地方被初始化为0
(或者它们是全局的)时,它才会起作用。
考虑一下
str1[] = "ABAB";
count[str1[0]]
与count['A']
相同,后者与count[65]
相同(如果字符集为ascii)。
++
将使计数“a”变为1
当i
变为1时,count[str1[1]]++
导致count['B']
变为1。i
= 2,然后count['A']
变为2。i
= 3,然后count['B']
变为2。
发布于 2013-01-01 17:02:32
该算法同时计算每个ascii字符在两个字符串中的出现次数。
str1[i] && str2[i]
检查是否到达这两个字符串的末尾。count1[str1[i]]++
增加了字符str1i的出现次数。
发布于 2013-01-01 16:59:10
&&适用于2个字符,而不是字符串。在这种情况下,它会检查这两个字符是否都不是空字符。
https://stackoverflow.com/questions/14112308
复制相似问题