C++ 为什么==运算符不能产生与strcmp相同的结果?
我已经创建了一个二维字符指针数组。我想用它来创建一个字典,如果变量ent是字典的一部分,则检索该单词的对应字典条目(如果存在)。我目前正在使用strcmp,但这只是因为==运算符给我带来了困难。我不确定为什么==运算符不能得到期望的结果 我怀疑这可能与指针比较有关,因为我将一个指向字符串的指针与另一个指向字符串的指针进行比较,而不一定是它的内容C++ 为什么==运算符不能产生与strcmp相同的结果?,c++,string,equality,implicit-conversion,c-strings,C++,String,Equality,Implicit Conversion,C Strings,我已经创建了一个二维字符指针数组。我想用它来创建一个字典,如果变量ent是字典的一部分,则检索该单词的对应字典条目(如果存在)。我目前正在使用strcmp,但这只是因为==运算符给我带来了困难。我不确定为什么==运算符不能得到期望的结果 我怀疑这可能与指针比较有关,因为我将一个指向字符串的指针与另一个指向字符串的指针进行比较,而不一定是它的内容 #include <iostream> #include <cstring> int main() { char *d
#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;
}
#包括
#包括
int main(){
字符*字典[][2]{
{“第一”,“星期一”},
{“第二”,“星期二”},
{“第三”,“星期三”},
{“第四”、“星期四”},
{“第五”、“星期五”},
{“第六”,“星期六”},
{“第七”、“星期日”},
{"",""}
};
字符[80]=“第六”;
for(inti{};*字典[i][0];i++){
如果(!strcmp(dictionary[i][0],ent)){
在if语句的条件下std::cout
if (word == dictionary[i][0])
字符串的第一个字符有比较过的地址
在表达式中,具有罕见异常的数组(例如在sizeof运算符中使用它们)被隐式转换为指向其第一个元素的指针
例如,如果您将像这样编写一个if语句
if ( "hello" == "hello" ) { /*...*/ }
然后表达式的计算结果为true
或false
,具体取决于编译器选项,该选项指定相等的字符串文本是作为一个字符串还是作为单独的字符串存储在内部
您可以定义字典,使其元素类型为std::string
在这种情况下,您可以将类型为std::string
的对象与包含字符串的字符数组进行比较,因为字符数组将隐式转换为类型为std::string的临时对象,因为使用运算符==您可以自行比较指针的相等性,如果改为使用std::string
。假设您试图比较字符数组,=
比较指针(第一个字符的地址),而不是strcmp()不要使用指针和数组,而是考虑使用<代码> STD::String ——它有一个与预期一样的比较操作符。如果你想使用C++代码,其中代码“> = = /CODE >按你的预期工作,那么你就需要编写C++代码,使用C++类,比如<代码> STD::String < /Calp> S,而不是用普通的char
指针编写C代码。你们真的很快。谢谢!这正是我所怀疑的。