找出回文字符串用c语言写,寻找回文字符串
★什么是回文串
就是正读与反读都相同的字符串。像werrrew这样的字符串。
★寻找字符串中最长的回文串
◇需要解决的问题
1、字符串输入与保存
字符串的输入函数有好多个,但是各自都有各自的限制。
scanf函数遇到“空格”和“TAB”键就终止输入;
getchar函数输入单个字符;
gets函数虽然能输入字符串,但是却没有指明读取的最大字符串数,很有可能读写到非法内存!
fgetc(stdin)与getchar函数等价
fgets(buf,MANX,stdin)则可以读取一整行放到数组buf中,因为此函数读到‘\n’时就会停止。
2、字母以外的字符处理
判断时忽略标点符号。可以使用函数isalpha(),此函数可以判断字符是否为字母。同时可以使用toupper()函数将大小写字母转化为同样的字母。该函数的头文件都为ctype.h
3、判断回文串
回文串的判断方法:可以从两边向内判断,也可以从内向两边判断
◇代码设计
#include
#include
#include
#include
#define MAXN 5000 + 10
int main()
{
char buf_a[MAXN],buf_b[MAXN];
int i,j,k,len,max,x,y,p[MAXN];
fgets(buf_a,sizeof(buf_a),stdin);
len = strlen(buf_a);
k = 0;
for(i = 0;i < len;i++)
{
if(isalpha(buf_a[i]))
{
buf_b[k] = toupper(buf_a[i]);
p[k++] = i;
}
}
max = 0;
for(i = 0;i < len;i++)
{
for(j = 0;j <= i && i+j < len;j++)
{
if(buf_b[i-j] != buf_b[i+j]) break;
if(max < 2*j+1)
{
max = 2*j+1;
x = p[i-j];
y = p[i+j];
}
}
for(j = 0;j <= i && i+j+1
{
if(buf_b[i-j] != buf_b[i+j+1]) break;
if(max < 2*(j+1))
{
max = 2*(j+1);
x = p[i-j];
y = p[i+j+1];
}
}
}
for(i = x;i <= y;i++)
{
printf("%c",buf_a[i]);
}
return 0;
}
★总结
◇思考
思考后得到的东西才是自己的,理解的也深刻,这也是学习能力的关键!遇到问题时不要急于寻求答案,可以将它看作为一次自我挑战,坚持独立思考,持续思考,问题多解,相信最终会受益的!
◇分析问题
我们遇到问题的阻碍之时,不能笼统的最自己说:这个问题我解决不了!我们要做的时分析,那么应该怎样分析呢?
1、拆分问题
一个问题解决不了,可能是因为其中的一个小问题的阻碍。就像上述问题,就起码包括三个小问题!多字符串的输入、字符串的处理、回文串的判断!正确的将问题拆分,将有利于问题的解决。
2、正确描述问题
正确的描述出自己所遇到的问题,有益于问题的解决!常问自己:我遇到的问题到底是什么?要解决这个问题还缺少什么?
3、确定问题的属性
知识层面的问题就是书本上或者网上能轻易查找到的!像什么叫回文串?
逻辑层面的问题必须通过自己的总结或者推理去探索的,不能够在书本或者网上轻易找到的问题!而逻辑层面的问题要比知识层面的问题要重要的多,也是重点去解决的问题
◇善于总结
要习惯将类似的知识点去做一下对比,找出各自的限制。区分相同点和不同点,这样会对知识有更深的了解!
◇问题多解
找出回文字符串用c语言写,寻找回文字符串相关推荐
- 找出最长单词(C语言)(指针实现)
输入一行文字,找出其中的最长单词并输出. 要求: a)用指针实现. b)字符串若有多个最长单词,输出第一个. c)字符串长度不超过100个字符. d)规定连续的字母(大小写都行)构成的字符串为单词,字 ...
- 找出最重的苹果C语言
题目标题: 找出最重的苹果(彭玉旭) 题目描述: 小明有n个苹果(n<20),每一个苹果都有一定的重量,请找出最重的苹果,并输出该苹果的重量 输入描述: 第一个整数是n,表示苹果的个数,接下来的 ...
- c语言数据库的连接字符串函数,C语言strcat()函数:连接字符串
头文件:#include strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); [参数]dest 为目的字符串指针,s ...
- c语言的十进制转十六进制字符串,用c语言写一个函数把十进制转换成十六进制,该如何处理...
用c语言写一个函数把十进制转换成十六进制 用c语言写一个函数把十进制转换成十六进制 网上找到一些,感觉有占乱 分享到: ------解决方案-------------------- #include ...
- 马走日问题,在5*5的棋盘中,马只能走日字。马从位置(0,0)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。(C语言实现)
#include <stdio.h> #include <windows.h> #include <math.h>#pragma warning(disable:4 ...
- 找出三位水仙花数 c语言
本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数.三位水仙花数,即其个位.十位.百位数字的立方和等于该数本身. 输入格式: 输入在一行中给出两个正整数M和N(100≤M≤N≤999). ...
- 找出素数并升序排列c语言,习题:随机产生N个四位正整数,将其中的素数选出,并升序排列之输…...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include "stdio.h" #include "stdlib.h" #define N 10 #defi ...
- c语言结构体定义字符串数组,C语言,结构体中字符串的声明(采用字符指针还是字符数组)...
结构体中,字符串选项是用字符数组表示好,还是用字符指针表示好? typedef struct person{ char *name; int age; char sex[6]; }: 该结构体中nam ...
- python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...
"在输入的十个数字中求最大和最小值的 python 代码"这个需求,在不同时间来看,解题思路不同,所需要的 python 知识点不同. 作为萌新的我,为此特意整理了 3 种解法,以 ...
- c语言指针交换字符串组,c语言 指针交换两个字符串
其实这个题是要用结构把学生成绩输进去再根据程序排序再输出学生信息,我不知道怎么根据成绩大小把st[].name输出啊,我用了一个交换函数,change想交换st[j].name和st[j-1].nam ...
最新文章
- C#条件判断-根据条件判断要走的路-if结构
- 测量几种不同颜色的LED的V-A 曲线,以及它们作为STM32的P2(Boot1)下拉电阻
- ida so 不root_十字符病毒,杀不死的小强,一次云服务器沦陷实录
- Allegro替换过孔类型
- java代码实现购物车小程序_使用Taro实现小程序商城的购物车功能模块的实例代码...
- matlab 球坐标绘图,MATLAB绘制地图
- svn java注释_svn 强制用户添加注释 和 允许用户修改注释
- 国际电汇的清算代码是什么?
- ie ajax缓存怎么清理,解决Ajax中IE浏览器缓存问题
- QQ桌球瞄准器开发(6)(7) 完结篇
- 根据卡号返回银行信息
- Android城市公交查询系统,书签基于android平台的实时公交查询系统
- 在GitHub上建立自己在线简历
- 量化经济学:手把手教你如何使用EXCEL分析股票历史数据
- 珠海沙龙PPT已上传!
- 浅谈软件可视化分析内存消耗综述中的识别方法
- 从备份升级到容灾,利用华为云就可以做到的灾备方案
- 数据库系统原理期末复习
- webpack基础配置
- python 手把手教你基于搜索引擎实现文章查重