++

2017-12-21 19 views
0

은 이제 나는 다음과 POC 코드가 있다고 가정 해 봅시다 :++

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)는 문자열이 아닙니다. 언제 b [0] 문제 해결에 b 할.

+0

나는이 전체 시간을 환각 상태에 틀림에 틀림 있었음에 틀림 없다. 깨달음에 감사드립니다. – Xigma

4

당신은 비교하고 char (구체적에 const char) 및 (operator==)에 대한 오버로드 비교 연산자가 존재하지 않는의 std::string.

당신은 몇 가지 옵션이 있습니다

(1) 비교하고자하고있는 문자 b의 첫 번째 문자를 비교를

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

(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