在回文验证中忽略标点符号,空格和大写字母

时间:2014-11-13 08:31:54

标签: c++

到目前为止,我的程序提示用户输入一个字符串,然后从开始到结束和向后阅读并比较两个结果。显然,如果他们是平等的,那么它就是一个回文,如果不是 - 它就不是了。

#include <iostream>
#include <stdio.h>

using namespace std;

int main(){

    string input;

    cout << "Enter a string: ";
    cin >> input;

    if (input == string(input.rbegin(), input.rend())) {
        cout << "Yes";
    } else {
        cout << "No";
    }

    return 0;
}

问题是,如何省略空格,标点符号等内容,以便我可以使用句子并检查它们是否是回文?

1 个答案:

答案 0 :(得分:4)

首先处理输入:

#include <algorithm>
#include <boost/algorithm/string/case_conv.hpp>
#include <cctype>

input.erase(
    std::remove_if(input.begin(), input.end(),
                   [] (char c) { return std::isspace(c) || std::ispunct(c); }),
    input.end()
);
boost::algorithm::to_lower(input);