Как сравнить строку с константной строкой в ​​переполнении стека

Допустим, у меня есть следующий код POC:

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

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

Я понимаю, что нет оператора «==», который соответствует этим операндам. И, способ исправить это, преобразовав значение переменной a в ‘hello’ (вместо двойных кавычек) как char.

Однако что делать, если у меня нет выбора, кроме как выполнить сравнение, как показано в коде. Является ли это возможным? Не могли бы вы предоставить какие-либо рекомендации или предложения, которые могут у вас возникнуть по этому вопросу.

Ваши ответы приветствуются.

0

Решение

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

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

a.at (2) не является строкой. когда делать б к б [0] решение проблем.

1

Другие решения

Вы сравниваете char (чтобы быть конкретным const char) и std::stringиз которых нет перегруженного оператора сравнения для (operator==).

У вас есть несколько вариантов:

(1) сравнить bпервый персонаж с персонажем, с которым вы хотите сравнить

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

(2) конвертировать a[2] к std::string

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

(3) пусть b быть char

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

Кроме того, вы не должны создавать строковый объект, как это

const string& a = "hello";

если вы на самом деле не хотите создать ссылку на другой строковый объект, например

string x = "hello";
const string& a = x;
4