在字符串上搜索字符

时间:2014-02-04 07:19:04

标签: c++ string search character

#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有任何字符,它应该返回一条消息。但我不知道我的代码有什么问题。

4 个答案:

答案 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}$");