回文字符串
题目描述
如果一个字符串逆序后与正序相同,那么称这个字符串为回文字符串。例如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
,所以这行代码会编译失败。