【发布时间】:2020-01-10 01:19:55
【问题描述】:
我创建了一个字符指针的二维数组。我想用它来创建一个字典,如果变量 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
如果我不能使用 == 运算符执行此操作,有没有办法通过使用指针但不依赖标头的函数来执行此操作?
谢谢!
【问题讨论】:
-
因为 operator == 你比较指针本身的相等性
-
如果你改用
std::string,你可以使用==。 -
假设您正在尝试比较 char 数组,
==比较指针(第一个字符的地址),这不是strcmp()所做的。考虑使用std::string,而不是使用指针和数组,它确实有一个可以按预期工作的比较运算符。 -
如果您想在
==按预期工作的地方使用 C++ 代码,那么您确实需要编写使用 C++ 类的 C++ 代码,例如std::strings,而不是编写 C 代码使用普通的char指针。
标签: c++ string equality implicit-conversion c-strings