c++ - 遇到简单回文程序的问题

标签 c++

我正在尝试编写一个简单的 C++ 程序,让用户知道他们输入的单词是否为回文。示例:“妈妈”是回文。

这是我所拥有的:

#include <iostream>
#include <string>

using namespace std;

// Forward Declaration
string reversed_string(string);


int main(){
    string str;
    string reversed;
    cout << "Enter string to check:\n";
    getline(cin, str);

    reversed = reversed_string(str);

    if(str == reversed){
        cout << str << " is palindrome\n\n";
    }
    else{
        cout << "Not palindrome";
    }
}

string reversed_string(string str){
    string reversed;

    for(int i = int(str.length()); i >= 0; i--){
        reversed += str[i];
    }
    return reversed;
}

当我尝试输入一个回文词时,它总是转到我的主函数中的 else 语句。我做错了什么?

最佳答案

字符串的最后一个字符位于索引 len - 1 处, 不是 len .根据标准 (C++11):

Returns *(begin() + pos) if pos < size(). Otherwise, returns a reference to an object of type charT with value charT(), where modifying the object leads to undefined behavior.

标准语的实际意思是,如果pos不小于字符串长度,函数返回空字符引用。因此,您要放入 反转字符串中的第一个字符是 null。

但是,您实际上并不需要反转字符串来确定它是否是回文,简单地使用以下(伪代码)算法可能会更容易:

def isPalindrome(string):
    set left to zero
    set right to one less than string length
    while left is less than right:
        if string[left] is not equal to string[right]:
            return false
        add one to left
        subtract one from right
    return true

鉴于您无论如何都必须处理每个字符以形成反转的字符串,您不妨使用该处理能力来检查原始字符串中的字符。这样,如果不是回文,您可以提前退出。

当然,这会将空字符串视为回文,这可以说是正确的。如果您认为这是正确的,只需预先检查一下:

def isPalindrome(string):
    if string length is zero:
        return false
    set left to zero
    ... and so on

关于c++ - 遇到简单回文程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214641/

相关文章:

c++ - 为什么 Qt 会从 .qrc 生成一个 .cpp 文件?

c++ - 如何在 C++ 中的文件列表中逐个文件打开文件?

c++ - 为什么这个整数会无限下降?

c++ - OpenGL 不绘制任何东西

c++ - 从 C++ 中的函数返回指向数组的指针?

c++ - 如何从输入中获取字符串 vector ?

c++ - 从 vector 中删除元素时析构函数调用两次

c++ - 如何用OpenCV解决图像处理相机IO延迟

c++ - DLL 设计 : the DLL needs to access some of the application functions/data

C++:是否可以重载 |位于同一类中的两个不同枚举的运算符?