簡體   English   中英

c ++如何使用==比較兩個字符串?

[英]How does c++ compare two string using ==?

我今天遇到了一個非常簡單但令人困惑的問題。

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

}

輸出為:0 1 1

為什么第一個比較語句是假的? 使用==運算符時,c ++如何比較兩個字符串?

str[0]+""是相當奇怪的東西 - 你取第一個字符的數值(假設字符'1'的ASCII編碼為49),並將其添加到指向空的開頭的指針串。 這會給你一個無效的指針和未定義的行為。

如果你想從第一個字符中創建一個字符串,那就是其中之一

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

哪個比較等於a

它們是不同的類型,表達式str[0]+""char *類型( ""char *而不是string ,對於char *運算符+沒有重載,所以它的行為是未定義的),但是astring類型,顯然它們不相等。要查看原因,可以運行以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM