如何以适当的方式使用子字符串?

时间:2019-05-27 17:46:56

标签: c++ string substring

当我尝试使用source.c.platform打印部分字符串时,出现标题为“超出范围”的错误,我该如何解决此问题。

substr()

2 个答案:

答案 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