判断字符串是否是回文字符串或者是否含有回文字符子串 (我是从两颗番茄的博客看的题目,然后自己编的) 不断学习!!
声明:这是我从"两颗番茄"的博客看的题目,然后自己编的 不断学习!!
在此谢谢他 呵呵!
不仅能判断规则的中心对称,如123454321,还要能判断如123456547890中的45654的不规则部分中心对称
算法思想
从第一个字符开始,逐个扫描,对每一个字符,查找下一个相同字符,判断这两个字符之间的字符串是否回文。
#include <iostream.h> #include <string.h> #define ERROR 0 #define OK 1 int Find(int m,int n,char arr[]) {//查找相同的元素,返回相同的位置 for(;m<n;--n) { if(arr[m]==arr[n]) return n; } return -1; } int Cmp(int a,int b,char arr[]) {//比较是否存在回文 while(arr[a]==arr[b]) {//比较每一个元素 ++a; --b; if(a>=b) return OK; //比较结束 } return ERROR; } int main() { int i=0,j=0; int m=0,max=0,n; char str[20]; cin>>str; while(str[j]) { ++j; } --j; //数组的最后一位为j max=j; //数组的最大值 n=max; for(;m<=n;++m) { int p=Find(m,n,str); if(p) if(Cmp(m,p,str)) { //若存在回文 cout<<"存在回文"<<endl; for(int x=m;x<=p;++x) { cout<<str[x]<<" "; } return 0; } } cout<<"不存在回文"<<endl; return 0; }
我是一名在校大学生,热爱编程,虽然起步晚了些,但我会努力的。呵呵!
数据结构 算法