有趣的“回文”检测(用指针实现)
英文中有很多的回文词,回文词的拼法十分有趣,无论是从前往后拼读,还是从后往前拼读,他们的拼法和词义都不变。例如: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; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报