c++如何使用==比较两个字符串

How does c++ compare two string using ==?

本文关键字:两个 字符串 何使用 比较 c++      更新时间:2023-10-16

我今天遇到了一个非常简单但令人困惑的问题。

#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "123";
string a = "1";
string b = "1";
cout << ((str[0]+"") == a) << endl;
cout << (a==str.substr(0,1)) << endl;
cout << (a==b) << endl;
}

输出为:01.1

为什么第一个compare语句为false?当使用==运算符时,c++如何比较两个字符串?

str[0]+""是一个相当奇怪的东西——您取第一个字符的数值(假设字符'1'的ASCII编码为49),并将其添加到指向空字符串开头的指针中。这会给您一个无效的指针和未定义的行为。

如果你想用第一个字符制作一个字符串,那就是

string(1, str[0])
string(str, 0, 1)
str.substr(0, 1)
string() + str[0]

其将与CCD_ 3 相比较

它们是不同的类型,表达式str[0]+""的结果是char *类型(""char *而不是string,对于char *,运算符+没有重载,因此其行为是未定义的),但astring类型,显然它们不相等。要查看原因,您可以运行以下代码:

cout<<typeid(str[0]+"").name()<<endl;
cout<<typeid(a).name()<<endl;