繁体   English   中英

如何检查输入是否有效?

[英]How to check if the input is valid?

do{
std::cout << "Name? \n";
std::cin >> Name1;
getchar();
}while();

如何检查用户输入的是名称而不是数字? 我尝试了cin.fail(),但似乎没有用。 如果用户输入的是字符,基本上我想做的就是循环,例如:,。 +-等...或数字(0,1,2,4 ...),如果有一种方法可以做while(Name1!= std :: string)

正如其他人所建议的,可以用不同的难度级别来解决您的问题。

如果将有效名称定义为不包含特殊字符或数字的字符串(即+-。0 ... 9等),则可以编写一个函数来检查输入的字符串是否仅包含字母字符。 一种方法是使用std::isalpha

如果您已经阅读了std::isalpha的链接参考,则会看到它检查给定字符是否为字母字符。 您还可以使用count_alphas(const std::string& s)方法的实现,该方法计算一个字符串中有多少个字符。

您可以在此处检查参考std::count_if 并且需要包括<algorithm>才能使用它。

int count_alphas(const std::string& s)
{
    return std::count_if(s.begin(), s.end(), [](unsigned char c){ 
                             return std::isalpha(c); 
                         });
}

使用这种方法,您可以按照以下步骤完成代码

do{
   std::cout << "Name? \n";
   std::cin >> Name1;
   getchar();
}while(Name1.length() != count_alphas(Name1));

如果条件为真,则意味着字符串中的字母字符少于字符串的长度,因此名称不是您定义的有效名称。

如果您发现非字母字符,也可以使用std::find_if而不是std::count_if直接返回false,您可以尝试自己实现。

如果您不习惯使用算法或lambda,则可以存储您不使用的内容
不想以有效名称出现在字符串向量中,并遍历输入名称以查看是否包含向量的任何存储元素。 如果是这样,则它现在是有效名称。

您可以使用正则表达式检查输入是否有效。

#include <regex>
#include <string>
#include <iostream>
int main()
{
    std::regex name("[[:alpha:]]+"); // Match 1 or more alphabetic characters 
    while (true)
    {
        std::string input;
        std::cout << "Enter name: " << std::endl;
        std::getline(std::cin, input);
        if (std::regex_match(input, name))
            std::cout << "Input is a name" << std::endl;
        else
            std::cout << "Input is not a name" << std::endl;
    }

    return 0;
}

你可以找到正则表达式的语法在这里和C ++的参考指南这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM