string的insert ???

回复帖子

@卐浪天卍 2019-08-14 16:16 回复
code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define rt register int
using namespace std;
const int M=101;
int n,k,num,len; char pd; string ch,zz;
int main()
{
    cin>>ch; scanf("%d",&n); len=num=ch.length();
    for(rt i=1;i<=M;++i) ch[i]=' '; 
    for(rt i=1;i<=n;++i)
    {
        cin>>pd;
        if(pd=='l') if(num!=0) num--; 
        if(pd=='D') if(num!=len) num++;
        if(pd=='B') if(num!=0)
        {
            k=1;
            while(1)
            {
                if(ch[k]!=' ') {ch.erase(num-k);break;}
                if(num==k) break;
                else k++;
            }
        }
        if(pd=='P')
        {
            cin>>zz;
            ch.insert(num+1,zz);
        }
    }cout<<ch;
    return 0;
}/*
L:将光标左移一个字符(如果光标在开头,则不用做任何操作)。
D:将光标右移一个字符(如果光标在结尾,则不用做任何操作)。
B:删除光标左边的一个字符(如果光标在开头,则不用做任何操作);
P:在光标右边插入字符$($可以是英文字母表中的任何一个小写字母)
dmih
11
B
B
P x
L
B
B
B
P y
D
D
P z
yxz*/

why?

输出:
没读完
dmih
11
B
B
P x

要是没加:for(rt i=1;i<=M;++i) ch[i]=' ';

输出:

dmih
11
B
B
P x
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::insert: __pos (which is 5) > this->size() (which is 3)

什么意思啊,求大佬解答
@andyli 2019-08-14 16:25 回复 举报

@卐浪天卍 代码中if(num==k) break;如果走到了这一步其实已经调用了$ch[k=num]$,而ch的最大下标是$k=num-1$,所以$string$抛出了异常。

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。