如何检查字符串是否是特定数量的字符并包含(或不包含)某些字符? C ++

时间:2015-10-01 19:44:24

标签: c++ string input error-handling boolean

假设我有两个基于用户输入的字符串(string1,string2)。我希望 string1 至少5个字符最多10个字符,并且只允许包含以下内容:

  1. 大写字母
  2. 小写字母
  3. 数字(0-9)
  4. 否则,系统将提示用户继续输入字符串,直到满足要求为止。

    while(len(string1)<5 or len(string1)>10) {
        if(len(string1) > 10) {
            cout << "Please enter a string that is less than 10 characters: ";
            cin >> input;
        } else if(len(string) < 5) {
            cout << "Please enter a string that is more than 5 characters: ";
            cin >> input;
        } else {
            cout << "Please enter a string with legal characters (uppercase/lowercase letters and numbers): ";
            cin >> input;
        }
    

    如何检查string1是否只包含大写字母,小写字母和数字?我会以某种方式使用以下内容吗?...

    string legalChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";   
    string1.find_first_not_of(legalChars)
    

    至于string2,我希望用户输入至少6个字符并包含至少一个非字母字符

    while(len(string2)<6) {
        if(len(string2)<6) {
            cout << "Please enter a string that is at least 6 characters long: ";
            cin >> input2;
        } 
    }
    

    如何检查string2中的非字母字符?我该如何处理这个问题?

3 个答案:

答案 0 :(得分:1)

对于string1,您只需检查长度是否至少为5个字符且最多10个字符(使用std::string::length),并将每个字符传递到isalnum以检查是否是字母数字。

对于string2,您可以检查它至少有6个字符,并且使用isupper至少包含一个大写字母。

或者@Lorehead指出,你可以使用正则表达式。哪个更好更完全取决于你。

答案 1 :(得分:0)

使用std::regex_match()。 (http://en.cppreference.com/w/cpp/regex/regex_match)。没有完整的答案,因为这听起来像是家庭作业。

如果您必须采用传统方式,可以使用isalnum()中的<ctype.h>strspn()中的<string.h>

答案 2 :(得分:0)

希望这能解决你的问题....... 这是ascii图表ASCII Chart

的链接
#include<iostream>
#include<string>
using namespace std;


int main()
{
     string input1,input2;
     bool inpFlag1=false,inpFlag2=false;

     while(inpFlag1 == false)
     {
             cout<<"Enter First String:"<<endl;
             cin>>input1;

           if(input1.size()<4 || input1.size()>10)
           {
             cout<<"Error!Min:5 Characters and Max:10 characters!"<<endl;
           }
           else
           {
            for(int i=0;i<input1.size();i++)
            {
            if((input1.at(i)>= 48 && input1.at(i)<=57) ||(input1.at(i)>=65 && input1.at(i)<=90) || (input1.at(i)>=97 && input1.at(i)<= 122 )) 
            {
              continue;
            }
            else
            {
             cout<<"Error Input string does not match conditions!"<<endl;
             inpFlag1=false;
             break;
            }
           }
          inpFlag1=true;
      }
     }

   while(inpFlag2 == false)
   {
     cout<<"Enter Second String:"<<endl;
     cin>>input2;

     if(input2.size()<6)
     {
      cout<<"Error! String should contain Min:6 Characters"<<endl;
     }
     else
     {
       for(int i=0;i<input2.size();i++)
       {
         if(input2.at(i)>=33 && input2.at(i)<=126)
         {
          continue;
         }
         else
         {
          cout<<"Error Input String does not match required conditions!" <<endl;
          inpFlag2=false;
          break;
         }
       }
       inpFlag2=true; 
      }
   }
   cout<<endl;
   cout<<"Entered Strings:"<<endl;
   cout<<input1<<endl;
   cout<<input2<<endl;


   return 0;
  }