我正在尝试使用fgets来调用不同的函数,具体取决于用户输入的字符串。我知道我需要稍后使用strtok,因为会有空格,例如“load 12”。但现在,我对使用strcmp来比较输入的字符串感到困惑。我知道strcmp可以像这样使用:
int check;
char string[10] = "test";
check = strcmp(string, "test");
// Check will be 0 if true
if (check == 0)
{
printf("same string\n");
}
else
{
printf("not the same\n");
}
它可以是像true和false这样的布尔值吗?如果“test”实际上是“test”,布尔值变为true,那么我将在if
语句中使用boolean值。
答案 0 :(得分:2)
您可以编写并使用包装器/辅助函数来实现此目标,如下所示:
bool are_equal(char* a, char* b)
{
return strcmp(a, b)==0;
}
答案 1 :(得分:1)
if (strcmp(string, "test") == 0)
将检查两个字符串是否相同。
strcmp(..)
的返回值是一个整数,如果两个字符串相同,则返回值为整数0
。所以你有效地比较0 == 0
是否正确。
答案 2 :(得分:1)
strcmp()
返回一个整数值0。对于布尔检查,除c中的整数0之外的所有内容都计为true,而整数0则为false。
是的,你的方法会奏效。
答案 3 :(得分:0)
strcmp
和其他此类函数的问题在于它们回到C没有布尔类型的时候。因此,他们将“不等于”定义为大于或小于零的整数,具体取决于第一个字符串是大于还是小于第二个字符串。在strcmp
的实现中,您可能会发现类似
int strcmp(const char *s1, const char *s2)
{
...
if(*s1 != *s2)
{
return *s1 - s2*
}
...
return 0;
}
这意味着如果字符串不相等,函数可能会返回任何数字,等于找到的第一个不相等字符的符号代码之间的差异。
您可以通过围绕strcmp
:
inline bool is_equal (const char* s1, const char* s2)
{
return strcmp(s1, s2) == 0;
}
inline bool is_greater (const char* s1, const char* s2)
{
return strcmp(s1, s2) > 0;
}
inline bool is_less (const char* s1, const char* s2)
{
return strcmp(s1, s2) < 0;
}
现在您可能会注意到strcmp
的返回值的原始定义并不像它看起来那么愚蠢,因为这意味着它们可以编写1个函数而不是3个。当您编写时,这非常方便bsearch
,qsort
等的比较函数
答案 4 :(得分:0)
实际上,您可以将strcmp用作布尔值,因为您要检查的是字符串是否相同;请参见。因此将返回0(也表示false)。所以你只要写:
if (!strcmp(string, "test")) //!0 = true
{
printf("same string\n");
}
else
{
printf("not the same\n");
}