提供两种方式:字符串处理(推荐),第二种字符数组处理
#include<iostream>
#include<algorithm>
using namespace std;
int pd(string s){//判断字符串是否是对称
if(s.length()==1)
return 1;
int n,i,j;
n=s.length();
for(i=0,j=n-1;i<j;i++,j--){
if(s[i]!=s[j])
return 0;
}
return 1;
}
int main(){
string a,b;
int i,j,k,n,temp;
while(getline(cin,a)){//输入框架
n=a.length();
for(i=n;i>0;i--){//从最大子串开始查找
temp=0;// 这块需要设置一个标记。个人常犯错误,两个循环,break,break;如下图的错误
for(j=0;j+i-1<n&&j<n;j++){//j+i-1代表从j下标一直数i个数后的下标不能越界
b=a.substr(j,i); //字符串方式处理一个函数就可以,如果是字符数组又是添加一个循环函数
if(pd(b)==1){
temp=1;
cout<<i<<endl;
break;
}
}
if(temp==1)
break;
}
}
return 0;
}
常犯错误
while(getline(cin,a)){//输入框架
n=a.length();
for(i=n;i>0;i--){//从最大子串开始查找
temp=0;// 这块需要设置一个标记。个人常犯错误,两个循环,break,break;
for(j=0;j+i-1<n&&j<n;j++){//j+i-1代表从j下标一直数i个数后的下标不能越界
b=a.substr(j,i); //字符串方式处理一个函数就可以,如果是字符数组又是添加一个循环函数
cout<<i<<endl;
break;
}
break;
}
}
第二种方式,在字符串上修改,思路差不多,只不过换成字符数组,但是字符数组截取字符串时候又得写一个函数,不推荐
#include<iostream>
#include<cstring>
using namespace std;
int pd(char s[]){
if(strlen(s)==1)
return 1;
int n,i,j;
n=strlen(s);
for(i=0,j=n-1;i<j;i++,j--){
if(s[i]!=s[j])
return 0;
}
return 1;
}
int main(){
char a[200],b[200];
int i,j,k,n,p,temp;
while(cin.getline(a,200)){
n=strlen(a);
for(i=n;i>0;i--){
temp=0;
for(j=0;j+i-1<n;j++){
for(k=0,p=j;k<i;k++,p++){
b[k]=a[p];
}
b[k]='\0';//注意下标的处理
if(pd(b)==1){
temp=1;
cout<<i<<endl;
break;
}
}
if(temp==1)
break;
}
}
return 0;
}