【问题标题】:How to get character without numbers when iterating through std::string?迭代std :: string时如何获取没有数字的字符?
【发布时间】:2019-10-12 10:16:46
【问题描述】:

我正在尝试遍历通过引用传递的 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'};

但是,如果知道如何在不更改字符串向量的情况下更改代码,那就太好了。

【问题讨论】:

  • &amp;letter == vLetters[0] 没有意义
  • 你应该关注你看到的症状,而不是你得出的结论。特别是,所有数据都以位模式存储。表示字母A 的位模式是0100 0001。表示数字65 的位模式是0100 0001。询问如何在没有位模式0100 0001 的情况下获得位模式0100 0001 是在要求不可能。与预期输出相比,关注程序的实际输出。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    相关资源
    最近更新 更多