if字符串验证循环的问题

时间:2014-11-05 08:41:12

标签: c++ string debugging if-statement nested

我正在开发一个验证if循环,它在开头和结尾检查管道并确保有32个有效字符(有效字符是:和|)

我想知道为什么我的程序没有正确读取32字符输入的if语句。这是我到目前为止所拥有的。

void checkitout(string validate)
{
   string check;
   check = validate;

   if ((check.length() == 31) && 
       (check.substr(0,1) == "|") && 
       (check.substr(31,1) == "|"))
   { 
     cout << "is this running?";

     for (int i = 0; i < 31; i++)
     {   
       cout << "for loop running";

       if (!(check.substr(i, 1) == ":") || !(check.substr(i, 1) == "|"))
       {
         cout << "Please enter acceptable barcode.";
         return;
       }
     }
   }
   else
   {
     cout << "else Please enter acceptable barcode";
   }
}

我是新手,但我认为我走在正确的轨道上。 cout将测试以查看循环是否正常工作。它适用于其他州。这是一个示例输入

||:| ::: |:|:|| || :::::::| :: | ||| :::

与往常一样,任何关于如何做得更好的想法都非常感谢。

1 个答案:

答案 0 :(得分:1)

你的字符串长度为32,因为check.length()== 31,if条件为false。 你的循环中的if条件也需要“&amp;&amp;”而不是“||”,因为你希望它既不是“|”也不是“:”是不可接受的条形码。

更改以粗体标记。

void checkitout(string validate)
{
   string check;
   check = validate;
   string one = check.substr(4,1);
   cout << (check.substr(4,1) == one) << endl;

   if ((check.length() == **32**) &&
       (check.substr(0,1) == "|") &&
       (check.substr(31,1) == "|"))
   {
     cout << "is this running?";

     for (int i = 0; i < 31; i++)
     {
       cout << "for loop running";

       if (!(check.substr(i, 1) == ":") **&&** !(check.substr(i, 1) == "|"))
       {
         cout << "Please enter acceptable barcode.";
         return;
       }
     }
   }
   else
   {
     cout << "else Please enter acceptable barcode";
   }
}