什么&&运算符何时在两个字符串之间?

时间:2013-01-01 16:56:55

标签: c syntax boolean-logic and-operator

在下面的代码中,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]]++;
}

4 个答案:

答案 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]为零意味着零和循环结束