遍历std :: string时如何获取没有数字的字符?

时间:2019-05-26 17:32:05

标签: c++ string type-conversion iteration pass-by-reference

我正在尝试遍历通过引用传递的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” ”,而不是“ A”。第二个字符是“ 66'B'”。

如何在没有这些数字的情况下从字符串中准确获取一个字母进行比较?

更新:如果找到,则会找到字母

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

更改为

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

但是,很高兴知道如何在不更改字符串向量的情况下更改代码。

1 个答案:

答案 0 :(得分:0)

&letterchar*char*是指针世界中的一种特殊类型。它被视为指向C样式NULL终止字符数组的指针。 &letter == vLetters[0]试图从std::string形成一个&letter,该终结符不​​是NULL终止的。因此,行为不确定。