#include <iostream>
#include <string>
using namespace std;
int main()
{
string id;
cout << "Enter your ID: ";
getline(cin, id);
for(char i = 'A'; i <= 'z'; i++) {
for(int j = 0; j <= id.length(); j++) {
if(id[j] == id.find(i)) cout << "It has characters.";
}
}
return 0;
}
我想输入一个id号,但它必须是一个整数。如果id有任何字符,它应该返回一条消息。但我不知道我的代码有什么问题。
答案 0 :(得分:3)
怎么样?
if !std::all_of(id.begin(), id.end(), std::isdigit)
因为他说&#34;它必须是一个整数&#34;?
答案 1 :(得分:0)
你有两个问题:第一个是std::string::find
没有返回一个字符,它返回一个位置。第二个问题是你的内部循环将循环出字符串的边界。
另请注意,在ASCII字母表中,大写和小写字母之间有特殊字符。
答案 2 :(得分:0)
如果id必须是整数,最好验证输入是否为整数(而不是验证输入是否有字母)。你永远不知道可以输入什么符号。除了字母之外还有许多符号。 如果id没有多个数字,并且可以放置到整数数据类型,您可能需要这样做
long long id;
while (true) {
cout << "Enter your ID: ";
getline(cin, input);
stringstream strm(input);
if (strm >> id)
break;
cout << "ID has invalid symbols or too long" << endl;
}
答案 3 :(得分:0)
我会使用正则表达式进行那种检查。它的工作原理如下:
#include <regex>
#include <string>
std::string toTest("12345");
std::regex expr("^[\\d]+$");
if (std::regex_match(toTest, expr))
{
// toTest contains only digits and at least one digit.
}
else
{
// toString is either emtpy or contains non-digit characters
}
希望有所帮助:)
编辑:如果要修改程序以检查id是否具有特定长度,可以使用以下正则表达式:
std::regex expr4dig("^[\\d]{4}$");
仅接受4位数字ID。 如果要检查4到8位数的ID,请使用此正则表达式:
std::regex expr4to8dig("^[\\d]{4,8}$");