簡體   English   中英

拋出實例“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM