VICTORIA.YF 2021-12-24 17:31 采纳率: 72.7%
浏览 39
已结题

求解释回文字符串begin-end之间的代码

######特别是第三个while那里,不懂什么意思

 //回文字符串(指针版):
//写程序,输入多个字符串,判断输入的字符串是否"回文",
//若是回文,输出YES,若不是回文输出NO.
//每个输入的字符串的前端或后端可能包含多个空格,不算作字符串的一部分,
//不参与判断过程,应该先裁剪掉。
//字符串的内部包含的空格,算作字符串的一部分,要参与判断的过程。
//每个字符串的输入长度(包括所有的空格)不超过100,
//使用指针pi和pj完成计算过程,定义如下:
//char s[100], *pi, *pj;
//输入包括多个用例,每个用例包含一个字符串
//(前端或后端或内部可能包含多个空格,字符串的长度不超过100),以换行作为字符串的结束。
//判断输入的字符串是否"回文",若是回文,输出YES,若不是回文输出NO,以换行结束。
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    ifstream file_in("in.txt");
    ofstream file_out("out.txt"); 
    if(!file_in||!file_out) return -1;
    streambuf *std_in;  
    streambuf *std_out;
    std_in= cin.rdbuf(file_in.rdbuf());  
    std_out= cout.rdbuf(file_out.rdbuf());  

    char s[100], *pi, *pj;
    int  n;
    while(cin.getline(s,100))
    {
/********************************* Begin ****************************/
        n=strlen(s);
        pi=s; pj=s+n-1;
        while(*pi==' ')
          {  pi++;}
        while(*pj==' ')
          {  pj--;}
        while( (pi<pj) &&(*pi==*pj) )
          {  pi++; pj--; }
        if(pi<pj)  
            cout<<"NO"<<endl;
        else   
            cout<<"YES"<<endl;
/********************************* End ******************************/
    }
    
    file_in.close();
    file_out.close();
    cin.rdbuf(std_in); 
    cout.rdbuf(std_out);    
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 南七灵 2021-12-24 17:45
    关注

    双指针从两头往中间比,如果不同说明不是回文串,相同则继续往中间比,直到两个指针指向相同的地方或者左指针在右指针的右边,此时说明字符串是回文

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向