40分求助

P5734 【深基6.例6】文字处理软件

lanjian1 @ 2024-07-22 10:43:20

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    cin>>a; 
    string b;
    cin>>b;
    for(int i=1;i<=a;i++)
    {
        int c;
        cin>>c;
        if(c==1)
        {
            string d;
            cin>>d;
            b=b+d;
            cout<<b<<endl;
        }
        if(c==2)
        {
            int d,e;
            cin>>d>>e;
            b=b.substr(d,d+e);
            cout<<b<<endl;
        }
        if(c==3)
        {
            int d;
            string e;
            cin>>d>>e;
            b=b.insert(a-1,e);
            cout<<b<<endl;
        }
        if(c==4)
        {
            string d;
            cin>>d;
            if(b.find(d)<100)  
            cout<<b.find(d)<<endl;
            else
            cout<<-1<<endl;
        }
    }
    return 0;
}

by zhao__sd @ 2024-07-22 10:54:18

你的代码中有几个问题需要修正,特别是关于操作 2、3 和 4 的实现部分。以下是对你代码的详细修改建议:

操作 2 的问题: b.substr(d, d+e) 是不正确的,因为 substr 的第二个参数是子串的长度,而不是结束位置。您应该使用 e 作为长度。 操作 3 的问题: b.insert(a-1, e) 中的 a-1 是不正确的,因为 a 是从输入中直接读取的,它表示在文档中的位置(从 0 开始)。但 a-1 可能不是你想要插入的索引,因为 a 已经是正确的索引了(除非你想在前一个位置插入,但题目要求在第 a 个字符前插入)。 操作 4 的问题: if(b.find(d) < 100) 是不正确的,因为 find 方法返回的是子串首次出现的位置(从 0 开始计数),如果未找到则返回 string::npos(一个特殊的常量,表示未找到)。你应该直接检查返回值是否为 string::npos

#include <iostream>  
#include <string>  
using namespace std;  

int main() {  
    int q;  
    cin >> q;  
    string doc;  
    cin >> doc;  

    for (int i = 0; i < q; i++) {  
        int c;  
        cin >> c;  
        if (c == 1) {  
            string str;  
            cin >> str;  
            doc += str; // 在文档后面插入字符串  
            cout << doc << endl;  
        }  
        if (c == 2) {  
            int a, b;  
            cin >> a >> b;  
            // 注意:b 是长度,不是结束位置  
            doc = doc.substr(a, b);  
            cout << doc << endl;  
        }  
        if (c == 3) {  
            int a;  
            string str;  
            cin >> a >> str;  
            // 在第 a 个字符前插入字符串  
            doc.insert(a, str);  
            cout << doc << endl;  
        }  
        if (c == 4) {  
            string str;  
            cin >> str;  
            // 查找字符串并输出位置,如果未找到则输出 -1  
            size_t pos = doc.find(str);  
            if (pos != string::npos) {  
                cout << pos << endl;  
            } else {  
                cout << -1 << endl;  
            }  
        }  
    }  
    return 0;  
}

by zhao__sd @ 2024-07-22 10:55:09

求关注


by lanjian1 @ 2024-07-22 11:02:23

@zhao_sd2010谢谢,已关


by lanjian1 @ 2024-07-22 11:03:23

@zhao_sd2010 谢谢,已关


|