String Palindrome程序不会忽略案例

时间:2016-02-28 00:02:12

标签: c++

你好,所有刚刚起步的程序员,

我正在尝试创建一个识别回文结构的程序。首先,我输入一个字符串然后反转。然后我将原始字符串与它的反向进行比较,以确定它是否是回文。我的问题是该程序不会忽略案例(Neven不会被视为回文)。我有两行代码用于使整个字符串小写,但我不确定如何在if语句中调用这些行。如果字符串是回文

,我使用if语句打印语句
for (std::string::size_type i=0; i<abc.length(); ++i)
std::tolower(abc[i],lower);

这是整个代码

#include <iostream>
#include <string>
#include <locale>

int main() {

    std::locale lower;
    std::string abc;
    std::cout << "Enter Text " ;
    getline(std::cin, abc);
    std::cout<<"Your string is "<<abc<<std::endl;
    abc=std::string(abc.rbegin(),abc.rend()); // reverse string
    std::cout<<"Your reverse string is " <<abc<<std::endl;
    for (std::string::size_type i=0; i<abc.length(); ++i)
    std::tolower(abc[i],lower);

    if(abc==std::string(abc.rbegin(),abc.rend())) {

        std::cout << abc << " is a palindrome"<<std::endl;
    }
    else
    {
        std::cout<<abc<<" is not a palindrome"<<std::endl;
    }

    return 0;
}

我试图包含&#34; std :: tolower(abc [i],lower);&#34;在if语句中但我收到了一个错误。我也尝试将它定义为一个变量,通过if语句传递它,但也失败了。我不确定如何进步。 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

std :: tolower()不是inplace函数,它返回返回值中的小写ch。

试试这个

abc[i] = std::tolower(abc[i],lower);

输出:此更改后

Enter Text Sas
Your string is Sas
Your reverse string is saS
sas is a palindrome

答案 1 :(得分:1)

std :: tolower不会修改传入的值,而是返回小写字母。所以你的行:

public static void waitForActivity(long time) {
     try {
         Thread.sleep(time);
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
 }

必须更改为:

std::tolower(abc[i],lower);

<强> Live On Coliru