如何检查字符串中的每个字符?

时间:2015-11-29 03:03:47

标签: c++ string loops

程序将要求用户输入必须仅由ABCD组成的strand,如果输入包含ABCD以外的字母,则必须显示错误,否则应输出“ok!”

string strand1;
again:
cout << "Enter String 1:\n";
cin >> strand1;
for (int i = 0; i <= strand1.length(); i++)
{
    if (strand1.at(i) != 'A'&&strand1.at(i) != 'B'&&strand1.at(i) != 'C'&&strand1.at(i) != 'D')
    {

        cout << "Invalid Input";
        system("cls");
        goto again;

    }
    else
    {
        i++;
    }
}
cout << "ok";
_getch();
return 0;

2 个答案:

答案 0 :(得分:2)

  1. 将必要的检查移至功能 - isValidInput
  2. 使用手动编码逻辑检查输入是否有效或使用标准库函数std::find_if来执行相同操作。
  3. while函数的main循环中使用该函数。
  4. bool isNotABCD(char c)
    {
        return !((c == 'A') || (c == 'B') || (c == 'C') || (c == 'D'));
    }
    
    bool isValidInput(std::string const& str)
    {
       return (std::find_if(str.begin(), str.end(), isNotABCD) == str.end());
    }
    
    int main()
    {
       string strand1;
    
       cout << "Enter String 1:\n";
       while ( cin >> strand1 && !isValidInput(strand1) )
       {
          cout << "Invalid Input";
          system("cls");
          cout << "Enter String 1:\n";
       }
       cout << "ok";
    }
    

    <强>更新

    您也可以使用更简单的isValidInput()版本,感谢@Blastfurnace提供建议。

    bool isABCD(char c)
    {
        return (c == 'A') || (c == 'B') || (c == 'C') || (c == 'D');
    }
    
    bool isValidInput(std::string const& str)
    {
       return (std::all_of(str.begin(), str.end(), isABCD));
    }
    

    更新2

    您还可以使用更简单的isValidInput()版本,感谢@JorenHeit提供建议。

    bool isValidInput(std::string const& str)
    {
       return (std::find_first_not_of("ABCD") == std::string::npos);
    }
    

答案 1 :(得分:1)

您的问题尚不清楚,但在检查您的代码后,我认为问题在于,当您应该使用i < strand1.length时,您正在使用 class TempRecord { private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F, 61.3F, 65.9F, 62.1F, 59.2F, 57.5F }; private int vps; public float this[int index] { get { return temps[index]; } set { temps[index] = value; } } public int mava { set { vps = value; } get { return vps + vps; } } } class MainClass { static void Main() { TempRecord tempRecord = new TempRecord(); tempRecord.mava = 4; // Usually If I Need Accces Class properties , Than I Used To Write objectname.properties name(tempRecord) , //But How Come Here It Work's Without Writing objectname.properties name tempRecord[3] = 58.3F; // Here Without Writing objectname.properties name tempRecord[5] = 60.1F; // here Without Writing objectname.properties name for (int i = 0; i < 10; i++) { System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]); } System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); } } 。 您正在使用的循环条件将检查索引超出字符串的范围。另外,你不应该在else语句中递增i,因为已经在for语句中完成了。将来,请清楚说明您的问题以及您获得的任何错误代码。