有趣的“回文”检测(用指针实现)
英文中有很多的回文词,回文词的拼法十分有趣,无论是从前往后拼读,还是从后往前拼读,他们的拼法和词义都不变。例如:dad(爸爸),mum(妈妈),noon(中午),eve(前夕),eye(眼睛),pop(流行),deed(行为),level(水平)等。简单地说,“回文”就是指顺读和倒读都一样的字符串。现在请你编程输入一个单词,判断它是否是回文。
要求:
(1)设置两个指针pStart和pEnd,让pStart指向字符串首部,让pEnd指向字符串尾部。
(2)利用循环从字符串两边对指针所指字符进行比较,当对应的两字符相等且两指针未超越对方时,使指针pStart向前移动一个字符位置(加1),使指针pEnd向后移动一个字符位置(减1),一旦发现两字符不等或两指针已互相超越(不可能是回文),则立即停止循环。
(3)根据退出循环时两指针的位置,判断字符串是否为回文。
程序的两次运行结果如下:
第1次
Input string:ABCCBA↙
Yes!
第2次
Input string:student↙
No!
输入格式: 字符串输入用gets()函数
输出格式:
输入提示信息:"Input string:"
输出信息,不是回文:"No!\n"
输出信息,是回文:"Yes!\n
请问一下怎么在字符中用一个指针从前,一个指针从后面
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 南七灵 2022-01-02 20:08关注
#include<stdio.h> #include<string.h> int main() { int i, count = -1; //count的初值为 -1,算出count具体的值后,方便与数组的下标相对应 char word[20]; char* pStart, * pEnd; printf("Input string:"); gets_s(word); for (i = 0; word[i] != '\0'; i++) //count记录的是数组中的有效字符 count++; pStart = word; //pStart指向word数组名,相当于指向首元素 因为数组名本身就是地址,所以本式中不用加 & pEnd = &word[count]; //pEnd指向word数组中'\0'前的字符 但此式中word[count]本身是一个值,所以要加&,传递地址 for (i = 0; i <= count; i++) { if (*(pStart + i) == *(pEnd - i)) { if (i > (count - i)) //因为对应的字符不相等时会跳出循环,所以两指针超越对方的情况只在单词回文时出现 { printf("Yes!\n"); break; } else continue; //持续遍历数组,直到所有对应的字符比较完毕 } else if (*(pStart + i) != *(pEnd - i)) { printf("No!\n"); break; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器