文章

25

粉丝

0

获赞

138

访问

3.6k

头像
删除字符串 题解:
P1026 贵州大学机试题
发布于2026年3月10日 15:33
阅读数 152

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    //在字符串中找gzu,find方法若找不到则会返回-1
    while(s.find("gzu") != -1){
        int index = s.find("gzu");    //记录gzu第一次出现的下标
        s.erase(index,3);    //直接删除gzu
    }
    int len = s.length();
    for(int i = 0;i<len;i++){
        cout<<s[i];
    }
}

直接用find找gzu,找到了就删,直到找不到为止,这样看上去挺对的,也能ac,但是有一种特殊情况,ggzuzuugzu,这样的话删除后就会重新组成gzu,结果就会错误。

然后我就想着不用erase用replace,用一些别的字符来替换掉删除的位置,输出的时候不读替换的字符,这样就不会出现上述的情况了,但是如果测试案例中包含了所有的字符,那这种方法也行不通,也不能完全ac。

最后用一种避免上述所有情况的办法,就是创建一个新的字符串result来存储不含gzu的结果,找到了gzu就i+3,找不到就加到result字符中,如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发