c - && 运算符在两个字符串之间时有何作用?

标签 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]]++;
}

最佳答案

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++)

基本上,如果在条件语句中使用了任何表达式,则会检查该值的 bool 值 - true 或 false。如果它不是 bool 值 - 说它是整数类型,那么 0 是 false 其他任何东西都是 true

这里 str[i] 是一个 char - 这是一个整型。因此,如果 str[i] 为 0,则计算结果为假,否则计算结果为真。

例如。

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]]++;

它是每个字符出现次数的计数 - 例如。如果字符集是 ascii,则在字符串遍历结束时,count['A'](与 count[65] 相同)将包含 'A' 在字符串中出现的次数。

只有当计数数组的每个成员都在某处(或者它们是全局的)初始化为 0 时,它才会起作用。

考虑

str1[] = "ABAB";

count[str1[0]]count['A'] 相同,后者与 count[65] 相同(如果字符集是 ascii)。

++ 会导致 count['A'] 变为 1

i 变为 1 时,count[str1[1]]++ 导致 count['B'] 变为 1。 i = 2,则count['A']变为2。 i = 3,则count['B']变为2。

关于c - && 运算符在两个字符串之间时有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112308/

相关文章:

ruby - 以下 ruby​​ 语法中的 `&` 是什么意思?

c - 为什么 C 没有二进制文字?

python - 将公式转换为cnf python

你能解释一下这段代码吗?

c - 从 C 中的数组保存数据

c - 使用异步 I/O 的消息排序 (epoll)

c - 对指针的 "turn off"二进制数字进行位操作

ruby - Lambda 作为参数传递给方法,参数数量错误错误

pandas - 根据与 bool 索引匹配的列值删除重复项

c - 为什么我们有 boolean 类型?