Ric*_*y.L 3 c boolean-expression strcmp cs50
在学习哈佛大学CS50课程的过程中,有一个问题让我很困惑。下面是困扰我很久的问题。
对于下面的代码,它想将名为“EMMA”的字符串与名为“names”的数组进行比较,其中包含 4 个名称。
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
// An array of names
string names[] = {"EMMA", "RODRIGO", "BRIAN", "DAVID"};
// Search for EMMA
for (int i = 0; i < 4; i++)
{
if (strcmp(names[i], "EMMA") == 0)
{
printf("Found\n");
return 0;
}
}
printf("Not found\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,它用于if (strcmp(names[i], "EMMA") == 0)检查名称“EMMA”。
然而,它也想如果我像如果我更换另一种方式写代码的运行if (strcmp(names[i], "EMMA") == 0)用if (!strcmp(names[i], "EMMA")),和原来相同的答案“找到”。
如果我没记错的话!,C中的感叹号的意思是“NOT”。在第一种方法中,它使用两个等号来表示与 0 相同的值。但在第二种方法中,它在函数 前面使用感叹号strcmp。我不熟悉为什么它在第二种方法中也给出相同的输出的含义,即使我已经查找了 function 的定义strcmp。
此外,如果有人能告诉我该strcmp函数将赋予什么价值以及用简单的词语正确表达什么,那就太好了?
该!运算符用于布尔否定。
!0与1(true)相同
!1与0(false)相同
事实上,每个非零整数都true在 C 中,只有 0 是false。
所以,如果strcmp(names[i], "EMMA") == 0是真的
然后!strcmp(names[i], "EMMA")也是真的,因为!0是true。
此外,如果有人能告诉我 strcmp 函数会给出什么值以及用简单的话正确表达什么,那就太好了?
检查此链接。
简而言之,
strcmp 可以返回三个可能的值:
0,如果两个字符串相等
一个正整数,如果第一个字符串大于第二个字符串
一个负整数,如果第一个字符串小于第二个字符串