首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果(!strcmp() ...做?

如果(!strcmp() ...做?
EN

Stack Overflow用户
提问于 2020-01-16 07:00:03
回答 5查看 687关注 0票数 1

有人能解释一下if语句中的感叹号(即!strmcp)是做什么的吗?

代码语言:javascript
复制
 string names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};

// Search for EMMA
for (int i = 0; i < 4; i++)
{
    if (!strcmp(names[i], "EMMA"))
    {
        printf("Found\n");
        return 0;
    }
}
printf("Not found\n");
return 1;
EN

回答 5

Stack Overflow用户

发布于 2020-01-16 07:05:22

如果两个字符串相同,则strcmp()返回0,因此如果在if子句中使用它来断言true语句,则需要对其求反。

如果您的子句为if(0),则不会执行条件中的代码。

对于完成,如果找到的第一个不同字符在第一个字符串中较低,则返回负数,例如:

第一个参数字符串:"abca"

第二个参数字符串:abcd"

这将返回负值。如果反之亦然,它将返回正数。

此外,在C中通常不使用string (请参考Jonathan Leffler的评论),您可以使用char*

代码语言:javascript
复制
char *names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};
票数 2
EN

Stack Overflow用户

发布于 2020-01-16 07:29:48

对于if语句,如果表达式的计算结果为0,则不执行if语句后面的代码块。任何其他值(正值或负值)将导致执行代码块。函数strcmp使用0来表示字符串相等,因为小于0用于区分大于0。

所以在这段代码中,我们希望在字符串相等时执行printf("Found\n");。因为strcmp的结果是0,所以我们需要取反这个值,这样它就变成了1,这将导致执行该代码块。

票数 2
EN

Stack Overflow用户

发布于 2020-01-16 07:37:39

一元运算符定义称为逻辑非运算符(例如,参见cppreference.com处的this ! )。如果expression的计算结果为0,则! expression返回1;如果expression的计算结果为0以外的任何值,则返回0

因此,if (!0)中的条件给出了1;这意味着满足条件并输入if块。它与if(0==0)具有相同的含义

因此,

代码语言:javascript
复制
if(!strcmp(names[i], "EMMA"))

在您的代码中与

代码语言:javascript
复制
if(0==strcmp(names[i], "EMMA"))

而且您已经知道strcmp何时返回0...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59760778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档