为什么 == 运算符没有产生与 strcmp 相同的结果?

Why is the == operator not yielding the same result as strcmp?

本文关键字:结果 strcmp 运算符 为什么      更新时间:2023-10-16

我创建了一个字符指针的二维数组。我想使用它来创建一个字典,其中,如果变量 ent 是字典的一部分,则检索该单词的相应字典条目(如果存在(。我目前正在使用 strcmp,但只是因为 == 运算符让我很难过。我不确定为什么 == 运算符没有导致预期的结果。

我怀疑这可能与指针比较有关,因为我正在将指向字符串的指针与指向字符串的另一个指针进行比较,而不一定是其内容。

#include <iostream>
#include <cstring>
int main() {
char *dictionary[][2] {
{"First","Monday"},
{"Second","Tuesday"},
{"Third","Wednesday"},
{"Fourth","Thursday"},
{"Fifth","Friday"},
{"Sixth","Saturday"},
{"Seventh","Sunday"},
{"",""}
};
char ent[80] = "Sixth";
for (int i{}; *dictionary[i][0]; i++) {
if (!strcmp(dictionary[i][0], ent)) { 
std::cout << "Word found: " << ent 
<< " corresponds to: " << dictionary[i][1] 
<< std::endl;
return 0;
}
}
std::cout << ent << " not found." << std::endl;
return 1;
}

我想用类似的东西替换if (!strcmp(dictionary[i][0], word))if (word == dictionary[i][0])并让它产生Word found: Sixth corresponds to Saturday

如果我不能使用 == 运算符执行此操作,有没有办法通过使用指针但不依赖于标头的函数来做到这一点?

谢谢!

在 if 语句的条件下

if (word == dictionary[i][0])

有字符串第一个字符的比较地址。

在表达式中,具有极少数例外的数组(例如在 sizeof 运算符中使用它们(被隐式转换为指向其第一个元素的指针。

例如,如果你要写这样的 if 语句

if ( "hello" == "hello" ) { /*...*/ }

然后,表达式的计算结果为truefalse,具体取决于编译器选项,该选项指定相等的字符串文本在内部存储为一个字符串还是单独的字符串。

您可以定义字典,使其元素类型std::string。在这种情况下,您可以使用相等运算符 ==。

在这种情况下,您可以将std::string类型的对象与包含字符串的字符数组进行比较,因为这些字符数组将隐式转换为类型为std::string的临时对象。