分析:
不能用scanf(“%s”),因为碰到空格或者Tab就会停下来。

解决输入中有空格

方法一:使用fgetc(fin),读取一个打开的文件fin,读取一个字符,然后返回一个int值,当文件结束,返回特殊标记EOF(int型的)。
(使用fgetc(fin)可以从打开的文件fin中读取一个字符,一般情况下,应当在检查它不是EOF后再将其转化成为char值。从标准输入读取一个字符可以用getchar(),等价于fgetc(sdin))。
方法二:使用fgets(buf,MAXN,fin)读取完整的一行,其中buf声明为char buf[MAXN]。这个函数读取不超过MAXN-1个字符,然后在末尾添上结束符‘\0’,因此不会出现越界情况。一旦读到回车'\n',读取工作会停止。并将'\n'作为最后一个有效字符。

解决判断时候忽略标点,输出却要保持原样。

分析:不能直接删除,不然不能输出。
预处理:构造新的字符串,不包含原来的标点符号,而且所有字符变成大写
n=strlen(buf);
m=0;
for(i=0;i<len;i++){if(isalpah(buf[i]))s[m++]=toupper(buf[i]);}
Note:使用了ctype.h中的isalpha(c)函数,用于判断字符是否是大写或者小写,用toupper(c)返回c的大写形式。
这样处理以后buf保存的就是原字符串中的所有字母了。(符号被删去)
isalpha,isdigit,isprint

枚举回文串的起点和终点

max记录最长回文子串的长度。如果串s的第i个字符到第j个字符是回文串,检查长度j-i+1是否超过max。

//----------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<time.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAXN 5000 + 10
char buf[MAXN], s[MAXN];
int p[MAXN];
int main(){
        int i,j,k,n,m=0,max=0,x=0,y=0;
       fgets(buf,MAXN,stdin);
       n=strlen(buf);
        //预??处?|理???
        for(i=0;i<n;i++)
       {
               if(isalpha(buf[i]))
              {
                     p[m]=i;
                     s[m++]=toupper(buf[i]);
              }
       }
 
        for(i=0;i<m;i++)
       {
               for(j=i;j<m;j++)
              {
                      //判D断?i到??j是??不?是??回?文?
                      int ok=1;
                      for(k=i;k<j;k++)
                     {
                            if(s[k]!=s[j+i-k]){ok=0;break ;}
                     }
                      if(ok && max<j-i+1)
                     {
                           max=j-i+1;
                           x=p[i];
                           y=p[j];
                     }
              }
       }
        for(i=x;i<y;i++)
              printf"%c",buf[i]);
       printf"Time used=%.21f\n",(double )clock()/CLOCKS_PER_SEC);
}
 

最新文章

  1. 161221、bootstrap table 实例
  2. 某代理网站免费IP地址抓取测试
  3. android关于AndroidManifest.xml详细分析
  4. Python初学者笔记:打印出斐波那契数列的前10项
  5. poj2255
  6. AFNetworking GET和POST请求
  7. C语言——第二次作业
  8. 使用nodeJS的 crypto模块来为你的密码hash加盐
  9. 旷视科技 -- Face++ 世界最大的人脸识别技术平台
  10. 前端学习 之 Bootstrap (一)
  11. 云服务器 - 安装zookeeper单机环境
  12. 杜教BM
  13. ubuntu , 笔记本合上盖子时不关机的方法。
  14. shell系统检测-&gt;
  15. 【转】MFC 数据绑定 DoDataExchange( )
  16. java面试题汇总(一)
  17. SpringBoot实战(七)之与Redis进行消息传递
  18. Python全栈day17(文件处理)
  19. tomcat 8 startup.bat启动乱码问题
  20. 算法笔记_103:蓝桥杯练习 算法提高 金明的预算方案(Java)

热门文章

  1. C#委托与事件讲解(一)
  2. phpQuery 无法解析 html 结构
  3. 明天学习一下验证码的匹配和thinkphp第十三章
  4. input、button、a标签 等定义的按钮尺寸的兼容性问题
  5. 【Sort】QuickSort
  6. POJ 2311 Cutting Game(SG+记忆化)
  7. vs2012常用快捷键总结
  8. [ An Ac a Day ^_^ ] Codeforces Round #368 Div. 2 A B C
  9. Chapter 15_1 require函数
  10. java基础(1)