c++ - 在 C++ 中验证字符串和日期输入?

标签 c++ validation

我今天才开始学c++。我正在做一些简单的注册程序。我想验证输入。我在验证全名和出生日期时卡住了。这是我的要求:

  • 全名:我只想检查它是否为空且没有标点符号
  • date_birth:我知道这有点棘手。但是,如果我可以验证输入是否有效,例如:月份(1-12)、日期(1-30)和年份(不超过当年)就足够了。

有什么快速的方法吗?

编辑:

我尝试用谷歌搜索字符串验证,我仍然遇到很多错误。这是我当前的代码:

string fullname;
do{
    cout << endl << "Please enter your fullname";
    cin >> fullname;
} while(!ispunct(fullname));

我的错误信息是:

XXXX: no matching function for call to `ispunct(std::string&)' 

我已经包含了库,这是检查字符串输入的正确方法吗?您通常如何进行验证?

编辑 2:

bool valid;
string fullname;
do{
    valid = true;
    cout << endl << "Please enter your fullname";
    cin >> fullname;
    string::iterator it;

      for ( it=fullname.begin() ; it < fullname.end(); it++ )
          if(ispunct(*it)){
              valid = false;
          }
} while(!ispunct(fullname));

奇怪,我输入:“!!!”,还是绕过。我的代码有问题吗?

最佳答案

好吧,我会尽力引导您朝着正确的方向前进。首先,为了验证字符串,您需要逐个字符地对其进行迭代。您可以使用迭代器和 for 循环来做到这一点。字符串类有一个 begin()end() 方法,您可以使用它们遍历整个字符串并检查每个字符。

一旦您遍历字符串,您需要做的就是根据您的要求编写代码来验证它。为确保没有标点字符,您可以使用 std::ispunct 函数,它会告诉您字符是否为标点字符。如果您发现任何标点符号,只需将其视为错误。

您的第一个要求是检查字符串是否为空,这是微不足道的。字符串类有一个 empty() 方法,如果字符串为空则返回 true。

验证生日比较棘手。这就是正则表达式的用途。不幸的是,C++ 没有对正则表达式的内置支持(至少在下一版本的标准之前是这样)。如果您有兴趣,Boost同时有一个很好的正则表达式库。

否则,您需要遍历字符串并验证每个字符。确保字符串以形成与月份名称相对应的单词的字符开头,然后确保后面有括号,等等。您需要决定如何处理字符之间的空格。这会很棘手,但这是熟悉 C++ 的一个很好的练习。

关于c++ - 在 C++ 中验证字符串和日期输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118954/

相关文章:

c# - 套接字性能 C++ 或 C#

jquery - 如何在 ajax 操作期间显示 throbber 或其他指示器?

java - 静态内部类的 Hibernate 验证

javascript - 用于验证输入文本字段的单个 JavaScript 函数

c++ - .txt to vector <string>,非类类型错误

c++ - 在 C++ 中测试枚举值的另一种方法

css - CSS 的 jslint 类型工具

java - 抛出消息包含违规值的异常是否正确或安全?

c++ - 程序不显示显示处理和计时的窗口

c++ - 通过指针传递