首页 > 解决方案 > 回文问题代码,在 c++ 错误中抛出 'std::out_of_range' 的实例后,我确实被调用终止

问题描述

#include <iostream>
#include <string>
using namespace std;

int palindromeMethod(string str)
{
    int max_val=str.size();
    bool result;
    for(int i=0;i<max_val;i++)
    {
        
        if(str.at(i)==str.at(max_val))
        {   if(i==max_val)
            {
                result=true;
            }
            max_val=max_val-1;
            
        }
        else
        {
            result=false;
        }
    }
    
    return result;
}

int main() {

string word="ROTOR";
bool result;
result=palindromeMethod(word);

if(result==true)
{
    cout << "Given String is palindrome";
}
else
{
    cout << "Given String is NOT palindrome";
}
}

我尝试运行此代码,但出现如下错误

在抛出 'std::out_of_range' 的实例后调用终止 what(): basic_string::at: __n (即 5) >= this->size() (即 5) 由信号 6 终止的命令

标签: c++

解决方案


您的代码中有两个错误

int max_val=str.size();
bool result;
for(int i=0;i<max_val;i++)
{        
    if(str.at(i)==str.at(max_val))  //<-- exception here because index must be less than size() (starting from 0)

您可以通过更改来修复它们:

int max_val=str.size() - 1;  // instead of str.size()

并且循环索引也应该是<=

for(int i=0;i <= max_val;i++) // instead of i < max_val

推荐阅读