我今天才开始学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/