当我在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;
}
}
答案 0 :(得分:-1)
你在这一行有一个错字:
flag == 1;
应该是
flag = 1;
错误的版本没有做任何事情,所以编译器抛出该行并且在gdb中似乎跳过了if语句。
答案 1 :(得分:-1)
假设您的0和1是二进制的,那么如果您可以将您的字符串转换为一些不错的机器表示,那么您可以在单行中进行此类测试。亲自阅读Hacker's Delight的副本,然后转到第12页(第2版):
((x & -x) + x) & x
(关闭所有连续的最右边的1,所以如果结果是0那么你的条件就满足了)