【算法竞赛入门练习题】string 类的带有空格的字符串输入 以及 利用数组下标 begin 与 end 遍历时 while() 中应该是 end < begin,而不能是 !=

题目链接:

码题集OJ-回文串 (matiji.net)

解题思路:

对于 string 类,不能使用 cin.get()和 cin.getline()进行输入,这会报错,

但用 cin 输入又无法输入带空格的字符串

其解决方法:

使用 getline()函数而不是 cin 对象的 getline()函数,这二者的参数有区别,

而且也不用担心字符串长度的问题。

其格式为:

getline(cin,string_name);

友情链接:

(2条消息) 对 string 类的输入(直接看总结)_坚持才能放假的博客-CSDN博客_string输入

参考代码:

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    string s;
    getline(cin,s);
    
    int begin = 0;
    //int end = s.end()-1;//注意end()指向字符串末尾的最后一个字符,所以需要减1
    int end = s.length()-1;
    
    while(begin < end)//这里不用 != 的原因:防止字符串的长度是偶数,那么就会出错
    /*例如:输入abccba
    此时cc的下标分别是2,3
    本应到此就结束while循环,
    但因为是 != 
    所以会使得循环结束,故使得结果出现误差*/
    {
        if(s[begin] == s[end])
        {
            
            begin++;
            end--;
        }
        else
        {
            
            cout << "NO" << endl;
            return 0;
        }

      
    }

    cout << "YES" << endl;
     
    return 0;
}

这里可以不使用 flag 作为判断字符串是否是回文串的标识,

因为如果一个循环下来如果没有提前退出 main() 函数,

则说明该字符串是回文串,

如果不是,

则会提前返回主函数


版权声明:本文为m0_64075307原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。