您的位置:首页 > 其它

最长回文自负串1 求长度

2015-08-05 20:14 295 查看
最长回文字符串1 求长度

//回文字符:在判断时,忽略所有的标点和空格,且忽略大小写,输出保持原样

//本程序为最长字符串1,只计算 长度

//核心:开始操作前会有一个预处理,就是把所有的字符经行筛选和转换,并构造一个新字符组,把所有的字母转换成大写的字母存入到新字母组中

//然后,再一个一个的判断,这样会简单很多

#include<stdio.h>

#include<string.h>

#include<ctype.h>//isalpha,isdigit(检查参数c是否为阿拉伯数字0到9),isprint(功能:判断字符c是否为可打印字符(含空格)

//说明:当c为可打印字符(0x20-0x7e)时,返回非零值,否则返回零。) 的头文件

#define MAX 5000+10

char buf[MAX],s[MAX];

int main()

{

int n,m=0,max=0;

int i,j,k;

fgets(buf,sizeof(s),stdin);//fgets头文件是string.h,stdin是 键盘输入字符将其送到控制台、输入流。

n=strlen(buf); //计算长度

for(i=0;i<n;i++) //将不计算所有的其他符号,并且把所有的字母转换成大写

{

if(isalpha(buf[i])) // isalpha(c)这个函数判断c是不是小写字母,如果是的话,那么执行下一步,转换成大写字母

s[m++]=toupper(buf[i]);//用toupper()是将小写转换成大写(或者用s[m++]=buf[i]-'a'+'A'也可以),而tolower 是将大写转换成小写

}

for(i=0;i<m;i++)

for(j=0;j<m;j++)

{

int ok=1;

for(k=i;k<=j;k++)

{

if(s[k]!=s[i+j-k])

ok=0; //上面标记的是ok=1;所以在下面出现ok=0时,那么ok便不会改变成 1

}

if(ok && j-i+1>max)

max=j-i+1; //如果ok是恒等于1的,那么就说明在i~j之间,就是一个字符串,没有不符合的情况

}

printf("max=%d\n",max);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: