您的位置:首页 > 其它

寻找输入的回文字符串并输出!!

2014-04-26 20:39 169 查看
/*
*函数功能:提取给定字符串中的回文字符串
*算法复杂度:O(n^2)
*返回:找到了回文字符串就输出,找不到就什么都不输出
*限制:认定大小写的字符有区别,认定空格等特殊字符会影响回文串的判定
*说明:对回文字符串的重叠现象(eg:abcdedcbcd)做了处理,平时我们很容易忽视这一点
*思路:2个迭代器变量,一个从前往后遍历(i),另一个从后向前找相同字符(position),找到相同字符
就判断两个字符间的字符串是否是回文字符串,如果是,则把positon存起来,用来和下次的遍历作比较,因为
回文字符串的字串也可看作回文串;否则,进入下一次循环。
*/
#include <stdio.h>
#include <string.h>
#define MAXSIZE 1024

typedef enum {false, true}  bool;

int GetSameChar(char a[], char ch, int startpos ,int endpos);
bool IsSymmetry(char a[], int startpos, int endpos);
void GetSymmetry(char a[]);

int main()
{
char a[MAXSIZE] = {0};
scanf("%s", a);
GetSymmetry(a);
return 0;
}

//寻找相同字符并返回索引值
int GetSameChar(char a[], char ch, int startpos ,int endpos)
{
endpos--;
while((a[endpos]) != ch && endpos > startpos)
{
endpos--;
}
if(startpos == endpos)
return 0;
else
return endpos;
}
//判断一个字符是否是回文字符串
bool IsSymmetry(char a[], int startpos, int endpos)
{
if(endpos <= startpos)
return false;
for(startpos++,endpos--; startpos < endpos; startpos++,endpos--)
{
if(a[startpos] != a[endpos])
return false;
}
return true;
}
//获取一串字符中的回文字符
void GetSymmetry(char a[])
{
const int SIZE = strlen(a);
int i,position,oldposition;
oldposition = 0; //avoid partion
for(i=0; i<SIZE; i++)
{
position = SIZE;
while((position=GetSameChar(a, a[i], i, position)) != 0)
{
if(position <= oldposition)
break;
if(IsSymmetry(a, i, position))
{
oldposition = position;
printf("Find it! From %2d  to %2d : ", i, position);
int tmp = i;
for(; tmp<=position; tmp++)
printf("%c", a[tmp]);
printf("\n");
break;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐