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

毕设工厂 其他问答 1
特别是第三个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条回复 我来回复
  • 毕设工坊
    这个人很懒,什么都没有留下~
    评论

    代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

    0条评论
  • 代码海岸
    这个人很懒,什么都没有留下~
    评论

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

    0条评论

发表回复

登录后才能评论