c++ - 将 C++ 输入与数组值进行比较

标签 c++

在过去的几个月里,我仍然在缓慢但坚定地艰难地学习 C++,并且遇到了我一直想弄清楚的障碍。我尝试过询问/阅读/搜索,但我永远找不到合适的答案。也许只是因为这个问题有点难问。

我想做的是在程序结束时,让结束序列将输入值与数组中的值进行比较。我必须循环比较序列吗?有没有更简单的方法来解决这个问题?

#include <iostream>
#include <string>
using namespace std;

int main () {

    string YesAnswers[5] = {"Y", "YES", "yes" "y"};
    string Name;
    string YN;

    do {
        cout << "Enter your name: ";
        getline(cin, Name);

        cout << "Your name is "<< Name;

        cout <<"\nIs this correct? Y\N: ";
        cin >> YN;

    } while(YN == YesAnswers);

    system("Pause");
    return 0;
}

最佳答案

您可以使用std::find()来自<algorithm> :

while (std::find(YesAnswers, YesAnswers + 4, YN) != YesAnswers + 4);

或者,如果你要创建 YesAnswers一个vector或其他一些容器而不是数组:

std::vector<std::string> YesAnswers;

while (std::find(YesAnswers.begin(), YesAnswers.end(), YN) != YesAnswers.end());

std::find()查找范围内的元素;如果找到该元素,则返回指向找到的元素的迭代器(如果是数组,则返回指针);如果没有找到该元素,它将返回一个指向范围末尾的迭代器(或指针)。

请注意,与大多数(所有?)标准库算法一样,范围在开始时是封闭的,但在结尾时是开放的。也就是说,“结束”迭代器/指针应该指向最后一个元素。

关于c++ - 将 C++ 输入与数组值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838199/

相关文章:

c++ - cin>> 运算符中的模糊重载

c++ - 为什么在空流上调用时 std::istream::ignore 不返回?

C++ 时间测量看起来太慢

c++ - openmp条件并行循环

c# - 如何将可选指针参数从 C++ 代码转换为 C#

c++ - 否定 float 总是安全的吗

c++ - 在 Visual Studio 2015 中检查 STL 容器

c++ - 使用管道加密文件

c++ - std :list iterator will iterate over empty list when accessed during deconstructor, std:vector 不是

c++ - 是否有 gcc 标志允许在 C++ 中进行 C 风格的隐式指针转换?