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

Tao*_*ang 2 c++ string

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

#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;

}
Run Code Online (Sandbox Code Playgroud)

输出为:0 1 1

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

Mik*_*our 11

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

如果你想从第一个字符中创建一个字符串,那就是其中之一

string(1, str[0])
string(str, 0, 1)
str.substr(0, 1)
string() + str[0]
Run Code Online (Sandbox Code Playgroud)

哪个比较等于 a