C++判断回文字符串
- 1、使用reverse()函数反转
- 2、使用循环,借助变量首尾比较
- 3、双指针
- 方法1:while循环
- 方法2:for循环
1、使用reverse()函数反转
思路:
-
首先读取一个字符串并存储在变量 s 中
-
将字符串 s 复制到另一个字符串变量 s1 中,保留原始字符串
-
使用 reverse 函数反转字符串 s
-
比较两个字符串,判断是否为回文串
#include<bits/stdc++.h>
using namespace std;
string s,s1;
int main(){
cin>>s;
s1=s;
reverse(s.begin(),s.end());
if(s==s1)
cout<< "yes";
else
cout<< "no";
return 0;
}
2、使用循环,借助变量首尾比较
思路:
- 输入的字符串
- 对字符串的前半部分进行遍历
- 在遍历过程中,比较当前字符与字符串末尾对应位置的字符
- 如果发现不相等的字符,输出“no”并结束程序;否则,遍历结束后输出“yes”
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int len = s.size();
for(int i = 0; i < len / 2; i++){
if(s[i] != s[len-1-i]){
cout << "no";
return 0;
}
}
cout << "yes";
return 0;
}
3、双指针
通过双指针法,从字符串的两端向中间遍历,比较对应位置的字符来判断字符串是否为回文串
方法1:while循环
思路:
- 输入的字符串 s
- 设置两个指针 i 和 j,分别指向字符串的开头和结尾。同时,设置一个标志变量 flag 为 1,表示默认字符串是回文串
- 使用 while 循环,当 i 小于 j 时,比较 s[i] 和 s[j]
1) 如果不相等,将 flag 设置为 0,并跳出循环
2)如果相等,继续循环,同时 i 增加,j 减少,向字符串中间移动 - 根据 flag 的值判断字符串是否是回文串
1) 如果 flag 为 1,输出“是回文串”
2)如果 flag 为 0,输出“不是回文串”
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int i = 0, j = s.size() - 1;
int flag = 1;
while(i < j){
if(s[i] != s[j]){
flag = 0;
break;
}
i++,j--;
}
if(flag){
cout << "是回文串";
}else{
cout << "不是回文串";
}
return 0;
}
方法2:for循环
思路:
- 输入字符串
- 设置首尾指针和标志变量
- 从两端向中间遍历,比较字符
- 不相等则标记为非回文,停止循环,相等则继续
- 根据标记输出“是回文串”或“不是回文串”
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int len= s.size() - 1;
int flag = 1;
for(int i = 0, j = len; i < j; i++, j--){
if(s[i] != s[j]){
flag = 0;
break;
}
}
if(flag){
cout << "是回文串";
}else{
cout << "不是回文串";
}
return 0;
}