当我尝试使用source.c.platform
打印部分字符串时,出现标题为“超出范围”的错误,我该如何解决此问题。
substr()
答案 0 :(得分:2)
当剪切位置大于或等于字符串大小时,应更改循环以停止,而不要使用i
,因为cut
可以大于1,例如:< / p>
while(deli < n.size())
{
res = n.substr(deli,cut);
cout << "The deli is: " << deli << endl;
deli+=cut;
cout << res << endl;
}
答案 1 :(得分:1)
错误(异常)非常有用:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is 8) > this->size() (which is 7)
,所以您知道您正在访问的是您的字符串(n
(例如,为什么还要命名为n
,而不是str
?无论如何。)。当您这样做时:
for(int i = 0; i < n.size(); i++)
然后请求子字符串,当您到达末尾时,您超出了范围,因为您一步一步(i++
)** **无论deli
的值是多少。但是,deli
根据cut
的值增长,因此您应检查deli
是否小于初始字符串的大小以保持循环。
最小工作示例:
#include <string>
#include <iostream>
using namespace std;
int main() {
int cut;
string n;
cout << "Enter string: " << endl;
cin >> n;
cout << "Enter size to cut: " << endl;
cin >> cut;
string res;
unsigned int deli = 0;
do {
res = n.substr(deli,cut);
cout << "The deli is: " << deli << endl;
deli += cut;
cout << res << endl;
} while (deli < n.size());
return 0;
}
输出:
Enter string: Stackoverflow
Enter size to cut: 5
The deli is: 0
Stack
The deli is: 5
overf
The deli is: 10
low