2017-06-16 3 views
-4

私はGDBでこれを実行すると、それは条件が 入力例えば文字と文字を比較するにはどうすればいいですか?

を満たしている場合でも、if文になりません。真でなければならない場合は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

これが何をすべきかを教えてください。 Btw、ちょうどそれを実行しました.IEが真であると評価された場合は、最初にhttp://cpp.sh/8vwnで実行されます。したがって、現時点ではデバッガを使用したことがありますか? – Aziuth

答えて

-1

あなたは、この行にタイプミスがあります

 flag == 1; 

それは間違ったバージョンは、何もしない

 flag = 1; 

でなければなりませんので、コンパイラは、プログラムからその行をスローし、文がしているように思われる場合gdbでスキップしてください。

-1

0と1がバイナリであると仮定すると、文字列を素敵なマシン表現に変換できれば、このようなテストを1つのライナーで実行できます。ハッカーのディライトのコピーを手に入れると、(第2版では)12ページに移動:

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

(結果は、あなたの条件が満たされている0であるので、もし、すべての連続した右端の1秒をオフにします)
関連する問題