#16306: 請問各位大大哪裡錯了


kolagh7486 (電腦前的咖啡)


#include <iostream>
#include <string>

using namespace std;

string chars;


int main()
{
while(cin>>chars)
{
int judge1=chars.length();
int judge2=judge1/2;
int judge=0;
for(int i=0;i<=judge2;i++)
if(chars[i]==chars[judge1-i])
judge=1;
if(judge==1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;





}




}

#16310: Re:請問各位大大哪裡錯了


OwO310659 (OwO)


大致看了一下你的程式有瞭個錯誤:

1. 相對位置索引錯誤,
  假設 字串s 的長度為 len ,
  其字元的索引值為 s[0]~s[len-1] , (並非 s[0]~s[len] , 因為這樣長度會變成 len+1 )
  在字串反轉(左右顛倒)之後,
  s[0] 會對應到 s[len-1] ,
  s[1] 會對應到 s[len-2] ... ...
  可以發現 s[i] 對應的依該是 s[len-i-1] 而非 s[len-i],
  所以在判斷式中的 chars[i] 其對應位置應該是 chars[judge1-i-1] 唷~

2. 程式上的邏輯錯誤, (假設上一個問題已經解決了)
  以你的程式這樣的寫法會變成,
  只要 chars 中任意的 chars[i]==chars[judge1-i-1] 就會輸出 "yes" ,
  但依照迴文的定義應該要是所有的 chars[i]==chars[judge1-i-1] 才會是迴文唷~

以上希望有幫助到你~ OwO