回文字符串
題目描述
如果一個字符串逆序后與正序相同,那么稱這個字符串為回文字符串。例如abcba
是回文字符串,abcca
不是回文字符串。
給定一個字符串,判斷它是否是回文字符串。
輸入描述
一個非空字符串(長度不超過?50,僅由小寫字母組成)。
輸出描述
如果是回文字符串,那么輸出YES
,否則輸出NO
。
樣例1
輸入
abcba
輸出
YES
樣例2
輸入
abcca
輸出
NO
錯誤代碼示例:
一
#include <bits/stdc++.h>
using namespace std;int main()
{string s;cin>>s;if(reverse(s.begin(), s.end()) == s){cout<<"YES";}else{cout<<"NO";}return 0;
}//
#include <bits/stdc++.h>
using namespace std;int main()
{string s;cin>>s;string s1 = reverse(s.begin(), s.end());if(s1 == s){cout<<"YES";}else{cout<<"NO";}return 0;
}
?二
#include <bits/stdc++.h>
using namespace std;int main()
{string s;cin>>s;string s1 = s;if(reverse(s1.begin(), s1.end()) == s){cout<<"YES";}else{cout<<"NO";}return 0;
}
正確示例:
#include <bits/stdc++.h>
using namespace std;int main()
{string s;cin >> s;string s1 = s; // 復制一份 sreverse(s1.begin(), s1.end()); // 反轉 s1if (s1 == s) { // 比較反轉后的字符串和原始字符串cout << "YES";} else {cout << "NO";}return 0;
}
總結:
reverse
?是一個原地修改的函數,返回值是?void
,不能直接用于比較,也不能用于賦值。
reverse
?是標準庫中的一個函數,但它是一個?原地修改?的函數,即它會直接修改傳入的迭代器范圍內的元素,而不是返回一個新的字符串。因此,
reverse(s.begin(), s.end())
?會直接反轉?s
?的內容,而不是返回一個新的反轉后的字符串。代碼中試圖將?
reverse
?的返回值賦值給?s1
,但?reverse
?的返回值是?void
,所以這行代碼會編譯失敗。