![](/img/trans.png)
[英]terminate called after throwing an instance of 'std::out_of_range'
[英]Termination called after throwing an instance 'std::out_of_range'
它們是“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<<"Yes\n";
else
cout<<"No\n";
return 0;
}
對於size_t
類型的i
,條件i >= 0
始終為真。 在i
為零后,會發生負溢出,並且i
變為某個大數。 str.at(i)
然后自然拋出。
非常簡單的修正:
for (size_t i = n; i > 0; i--)
strR.push_back(str.at(i - 1));
或者,您可以為i
使用有符號類型,例如int
。 但是,對於非常大的字符串,這可能會中斷。 我不會在生產代碼中使用它。
順便說一句,要檢查字符串是否為回文,您不需要復制它。 更簡單、更快的方法是遍歷字符串的一半並比較下半部分的相應字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.