2017-08-23 17 views
-3
char s[100]; 
//char t[100]; 
int count = 1; 
int j=0; 
int x,i; 
cin >>s; 
x=strlen(s); 
//cout <<x <<endl; 
cout <<s[j] <<endl; 
i=x-1; 
cout <<s[i] <<endl; 
for (int i = x-1; i <= 0; i--) 
{ 
    if (s[j] != s[i]) 
    { 
     count = 0; 
    } 
    j++; 

} 
if (count ) 
{ 
    cout <<"YES"; 
} 
else 
{ 
    cout <<"NO"; 
} 
return 0; 

私は与えられた文字列が回文かどうかを知りたいですか?このコードで何が間違っていますか?私は、パリンドロームが入力されている場合はYESを、文字列がパリンドロームでない場合はNOを出力すると予想しています。しかし、常にYESを出力します。エラーはありません。文字列が回文かどうかチェックしたい

+2

ようこそスタックオーバーフローに!あなたのコードが「うまくいかない」方法を詳しく説明できますか?あなたは何を期待していましたか、実際何が起こったのですか?例外/エラーがある場合は、それが発生した行と例外/エラーの詳細を投稿してください。これらの詳細を入力または編集してください。 – Machavity

+0

条件「i <= 0」は最初から偽です。ループは決して実行されません。 –

+1

'for(int i = x-1; i <= 0; i - )':これは、空または1文字の文字列を入力した場合にのみ発生する 'i <= 0'までループします。したがって、forループは決して実行されず、 'count'は常に' 1'です。 –

答えて

0

あなたのコードは決して文句を言わない本当のほかassuming your string is not emptyことが条件i = x-1 and i <=0ので、そのfor loopに入っていない場合、文字列はあなたがNO印刷し、コードを終了することができます一致していないとすぐにので、カウント変数を維持する必要はありません。

あなたはそれが好きで実装できます。

#include <iostream> 

using namespace std; 

int main() { 
    char s[100]; 
    int x,i,j=0; 
    cin >>s; 
    x=strlen(s); 
    i = x-1; 
    cout <<s[0] <<endl; 
    cout <<s[i] <<endl; 
    for (int i = x-1; i >= 0; i--) 
    { 
     if (s[j] != s[i]) 
     { 
      cout <<"NO"; 
      return 0; 
     } 
     j ++; 
    } 
    cout <<"YES"; 
    return 0; 
} 
関連する問題