【问题标题】:Searching character on strings在字符串上搜索字符
【发布时间】:2014-02-04 07:19:03
【问题描述】:
#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 有任何字符,它应该返回一条消息。但我不知道我的代码有什么问题。

【问题讨论】:

  • for(char i = 'A'; i &lt;= 'z'; i++) 似乎是错误的。 A 和 a 的差是 32 和 26。
  • 那么您是要搜索字符,还是要确保字符串只包含数字?这两个不一样。

标签: c++ string search character


【解决方案1】:

怎么样

if !std::all_of(id.begin(), id.end(), std::isdigit) 

既然他说“必须是整数”?

【讨论】:

    【解决方案2】:

    你有两个问题:第一个是std::string::find 没有返回一个字符,它返回一个位置。第二个问题是你的内部循环会超出字符串的范围。

    另请注意,在ASCII 字母表中,大小写字母之间存在特殊字符。

    【讨论】:

    • 我认为我解决了它:for(char i = 'A'; i
    【解决方案3】:

    如果 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;
     }
    

    【讨论】:

      【解决方案4】:

      我会使用正则表达式进行这种检查。它的工作原理是这样的:

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

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2020-01-06
        • 1970-01-01
        • 2019-10-06
        • 2012-07-23
        相关资源
        最近更新 更多