Использование strcmp для вектора

У меня есть вектор строк, и я хочу сравнить первый элемент вектора с кучей разных «строк».

Вот что я хотел сделать:

if (strcmp(myString[0], 'a') == 0)

но strcmp не работает. Я в основном хочу проверить содержимое myString[0] с кучей разных символов, чтобы увидеть, есть ли совпадение. Так что это будет что-то вроде

if (strcmp(myString[0], 'a') == 0){
}
else if (strcmp(myString[0], 'ah') == 0){
}
else ifif (strcmp(myString[0], 'xyz') == 0)

и т.д..

Что я могу использовать для этого сравнения? Компилятор жалуется на то, что «не существует подходящего преобразования из std:string в «constant char *», поэтому я знаю, что ему не нравится, что я выполняю сравнение строки с char, но я не могу понять, как правильно это сделать.


person Noobgineer    schedule 02.05.2016    source источник
comment
"a" отличается от 'a'.   -  person user253751    schedule 02.05.2016


Ответы (3)


std::string перегружает operator== для сравнения строк, поэтому эквивалентно

if (strcmp(cString, "other string") == 0)

is

if (cppString == "other string")

Итак, ваш код становится (например)

else if (myString[0] == "ah")
person Ben Voigt    schedule 02.05.2016

'a' — это не строка, это символьная константа. Вам нужно использовать "a", "ah", "xyz" и т. д.

Кроме того, если вы хотите использовать strcmp, вам нужно использовать:

if (strcmp(myString[0].c_str(), "a") == 0)

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

if (myString[0] == "a")
person R Sahu    schedule 02.05.2016

Вы пометили это сообщение как C++.

сравнить первый элемент вектора с кучей разных «строк».

Если я правильно читаю ваш пост, первым элементом вектора является std::string.

std::string имеет функцию и оператор для сравнения строк со строками.

Функция используется как:

if (0 == pfnA.compare(pfnB))

Как описано на cppreference.com:

Возвращаемое значение из std::string.compare(std::string) равно

  • отрицательное значение, если *this стоит перед последовательностью символов, заданной аргументами, в лексикографическом порядке

  • положительное значение, если *this появляется после последовательности символов, указанной аргументами, в лексикографическом порядке

  • ноль, если обе последовательности символов сравниваются эквивалентно

Оператор ==(), как уже было описано, возвращает true, если две строки совпадают.

person 2785528    schedule 02.05.2016