2017-06-16 150 views
-4

当我在GDB运行此不进入,如果即使条件满足如何将字符串逐个字符与字符进行比较?

例如 输入语句:000 第一,如果应该是真实的,但是是假的

下面是完整的代码 该方案被认为检查字符串中出现的全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

'getline'之后'line'的内容是什么?你有没有使用GDB检查过它? –

+0

该行的内容是相同的“000” –

+0

让我们从你告诉我们这是应该做什么开始。顺便说一句,刚刚执行它,第一个如果IS评估真实的,在http://cpp.sh/8vwn - 因此:你甚至在这个时间点使用调试器? – Aziuth

回答

-1

你在这一行一个错字:

 flag == 1; 

应该

 flag = 1; 

错误的版本没有做任何事情,所以编译器会引发该行搞出来的程序和if语句似乎在gdb中跳过。

-1

假设你的0和1是二进制的,那么如果你可以把你的字符串转换成一些很好的机器表示形式,那么你可以在一行内完成这种测试。把你的手黑客的喜悦的副本,并转到第12页(在第2版):

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

(关闭所有连续最右边的1秒,因此,如果结果为0,那么你的条件得到满足)

相关问题