如何将字符串字符与字符进行比较?

时间:2017-06-16 10:00:33

标签: c++

当我在gdb上运行它时,即使符合条件,它也不会进入if语句

例如,

输入:000 第一个if应该是true但是是假的

这是完整的代码 该程序应该检查字符串中出现的所有1是否是连续的

谢谢..

#include<iostream>
#include<limits>
#include<string>
#include<sstream>

using namespace std;

int main()
{
  int trials = 0;
 cin>>trials;
 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
 while(trials--)
 {
   string line;
   getline(cin,line);

   int i = 0;
   int n = line.length();

   int d = 0;
   int u = 0;
   int flag = 0;


   for(i = 0; i < n; i++)
 {
   if(line[i] == '0')
     {
       flag = 1;
     }
   if(line[i] == '0' && line[i + 1] == '1' && d == 0)
     {
      u++;

     }
   else if(line[i] == '1' && line[i + 1] == '0' && u == 1)
     {
       d++;
     }
 }
   if(flag == 0)
cout<<"YES"<<endl;
   else if(u ==1 && d == 1)
 {
   cout<<"YES"<<endl;
 }
   else
 cout<<"NO"<<endl;


 }
}

2 个答案:

答案 0 :(得分:-1)

你在这一行有一个错字:

      flag == 1;

应该是

      flag = 1;

错误的版本没有做任何事情,所以编译器抛出该行并且在gdb中似乎跳过了if语句。

答案 1 :(得分:-1)

假设您的0和1是二进制的,那么如果您可以将您的字符串转换为一些不错的机器表示,那么您可以在单行中进行此类测试。亲自阅读Hacker's Delight的副本,然后转到第12页(第2版):

((x & -x) + x) & x

(关闭所有连续的最右边的1,所以如果结果是0那么你的条件就满足了)