抛出实例'std::out_of_range'后调用的终止

Termination called after throwing an instance 'std::out_of_range'

本文关键字:调用 终止 range 实例 std out of      更新时间:2023-10-16

>它们是运行时错误'out_of_range'。当我使用 i>0 时它有效,但如果我这样做,我的第一个字符不会添加到我的字符串中。

int main(){
string str;
string strR;
short count {0};
getline(cin,str);
int n=str.length();
for(size_t i=n-1;i>=0;i--)
strR.push_back(str.at(i));

if(str==strR)
cout<<"Yesn";
else
cout<<"Non";
return 0;

}

对于类型size_ti,条件i >= 0总是为真。i为零后,发生负溢出i变成一个大数字。 然后str.at(i)自然而然地投掷。

非常简单的更正:

for (size_t i = n; i > 0; i--)
strR.push_back(str.at(i - 1));

或者,也可以对i使用带符号类型,例如int。但是,对于非常大的字符串,这可能会中断。我不会在生产代码中使用它。


顺便说一句,要检查字符串是否是回文,您无需复制它。更简单、更快速的只是遍历字符串的一半并比较后半部分的相应字符。