2017-12-21 44 views
0

のは、私は次のPoCコードがあるとしましょう:C++でのconst文字列に文字列を比較する方法

const string& a = "hello"; 
string b = "l"; 

if(a.at(2) == b) 
{ 
// do stuff 
} 

私はこれらのオペランドにマッチするいかなるオペレータ「==」がないことを理解しています。そして、それを修正する方法は、変数aの値を 'hello'(二重引用符ではなく)のcharに変換することです。

しかし、コードに示されているように比較を実行する以外は何ができませんか。出来ますか?あなたはこの問題に関して指導や提案をしてください。

あなたの回答は高く評価されます。

+2

'CONST列A = "こんにちは";' ' –

+6

チャーB = 'L'、 ' –

+0

**はこの**コードを生成するメッセージを表示します。 –

答えて

1
const string& a = "hello"; 
string b = "l"; 

if (a[2] == b[0]) 
{ 
    // do stuff 
} 

a.at(2)は文字列ではありません。いつdo bからb [0]問題解決か。

+0

私はこの全体を幻覚していたに違いない。啓発に感謝します。 – Xigma

4

あなたは(operator==)には、オーバーロードの比較演算子が存在しないのcharconst char具体的には)とstd::stringを、比較しています。

あなたは、いくつかのオプションがあります。

は、(1)

string b = "l"; 
string a = "hello"; 
if(a[2] == b[0]) { /* .. */ } 

と比較して、あなたが希望しているキャラクターにbの最初の文字を比較する(2)std::string

a[2]を変換します
string b = "l"; 
string a = "hello"; 
if(string{a[2]} == b) { /* .. */ } 

(3)bchar

char b = 'l'; 
string a = "hello"; 
if(a[2] == b) { /* .. */ } 

あなたが実際には別の文字列オブジェクトへの参照を作成する場合を除き、また、あなたは、例えば、この

const string& a = "hello"; 

のような文字列オブジェクトを構築してはいけません

string x = "hello"; 
const string& a = x; 
+0

これらのオプションの詳細な内訳ありがとうございます。私のコードでは、実際には "const string&a"を関数の引数として渡しています。 – Xigma