m0_62927409 2022-01-02 19:58 采纳率: 81%
浏览 33
已结题

请问一下怎么在字符中用一个指针从前,一个指针从后面

有趣的“回文”检测(用指针实现)
英文中有很多的回文词,回文词的拼法十分有趣,无论是从前往后拼读,还是从后往前拼读,他们的拼法和词义都不变。例如: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

  • 写回答

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;
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月10日
  • 已采纳回答 1月2日
  • 创建了问题 1月2日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器