我的代碼
#include<bits/stdc .h>
using namespace std;
int main() {
int n ;
cin >> n;
string s1 , s2 , s3;
cin >> s1 >> s2;
string s = s1 s1;
int count = 0;
for (int i = 0 ; s3 != s2 ; i ) {
// int a = s.find()
s3 = s.substr( i , s1.length() );
count ;
}
cout << count - 1;
return 0;
}
在這種情況下,當我嘗試旋轉小尺寸的字串時,它作業正常,但是當我嘗試使用一些大長度的字串時,它顯示錯誤
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 227) > this->size() (which is 226)
我不明白發生了什么,因為字串長度為 20 或 30 它作業正常,但是當字串長度超過 110 時,它顯示出這種型別的錯誤。
這個測驗用例也顯示錯誤
113 ndafmffmuuwjzqpquwjhuftohawpfegsjvnxwipwqlswvawogjuyiqtzsgpwgosegmuuhpzwchejuiitumyescxxyecnsatcbfpseqzowvdjyvchg zqpquwjhuftohawpfegsjvnxwipwqlswvawogjuyiqtzsgpwgosegmuuhpzwchejuiitumyescxxyecnsatcbfpseqzowvdjyvchgavqnonmkwgqp
uj5u.com熱心網友回復:
這很簡單,您的for回圈具有永遠不會false用于此輸入的條件。因此,您的i大小超出了s(大小的兩倍s1)。
注意這兩個字串的共同部分是:zqpquwjhuftohawpfegsjvnxwipwqlswvawogjuyiqtzsgpwgosegmuuhpzwchejuiitumyescxxyecnsatcbfpseqzowvdjyvchg. 區別在于:
s1前面有:ndafmffmuuwjs2在后面L:avqnonmkwgqp
所以s1不是輪換,s2這就是為什么 codition in foris never fasle。
這就是std::basic_string::substr引發例外的原因。
現場演示。
一些修復。
這是更好的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/410756.html
標籤:
上一篇:查找前半部分與后半部分匹配的字串
下一篇:根據長度從串列中洗掉字串?
