Как получить символ без цифр при переборе std :: string? - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь перебрать каждый символ в std :: string, который был передан по ссылке, и сравнить его с первым элементом вектора строк.

#include <iostream>
#include <vector>

bool letterFound (const std::string &s){
    std::vector<std::string> vLetters = {"A", "B", "C"};
    for (auto &letter : s) {
        if (&letter == vLetters[0]) {
            return true;
        }
    }
    return false;
}

int main() {
    std::string result = letterFound("AB")
                        ? "Letter [A] found"
                        : "Letter not found";
    std::cout << result << std::endl;
    return 0;
}

Если в функцию была передана только одна буква «A», то буква была найдена, но если я передал более одной буквы, например «AB», то фактическое значение первого сравниваемого символа равно «65 'A' ", а не" А ". Второй символ "66 'B'".

Как получить ровно одну букву из строки для сравнения без этих чисел?

Обновление: Письмо будет найдено, если

std::vector<std::string> vLetters = {"A", "B", "C"};

изменить на

std::vector<char> vLetters = {'A', 'B', 'C'};

Однако было бы неплохо узнать, как изменить код без изменения вектора строк.

1 Ответ

0 голосов
/ 26 мая 2019

&letter является char*.char* - это особый тип в мире указателей.Он обрабатывается как указатель на символьный массив с символом NULL в стиле C.&letter == vLetters[0] пытается сформировать std::string из &letter, который не заканчивается NULL.Отсюда и неопределенное поведение.

...