C++求调

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

dlgd_start @ 2024-08-20 15:51:39

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int q,i,j;
    cin>>q;
    string s,d="";
    cin>>s;
    string a[1000];
    cin.ignore();
    for(i=0;i<q;i++)
    {
        getline(cin,a[i]);
    }
    for(i=0;i<q;i++)
    {
       if(i!=q-1)
       {
        if(a[i][0]=='1')
        {
            for(j=2;j<a[i].size();j++)
            {
                s=s+a[i][j];
            }
            cout<<s<<endl;
        }
        if(a[i][0]=='2')
        {
            for(j=(int)(a[i][2]-'0');j<(int)(a[i][2]-'0')+(int)(a[i][4]-'0');j++)
            {
                d=d+s[j];
                s=d;
            }
            cout<<s<<endl;
            d="";
        }
        if(a[i][0]=='3')
        {
            for(j=0;j<=(int)(a[i][2]-'0')-1;j++)
            {
                d=d+s[j];
            }   
            for(j=4;j<a[i].size();j++)
            {
                d=d+a[i][j];
            }
            for(j=(int)(a[i][2]-'0');j<s.size();j++)
            {
                d=d+s[j];
            }
            s=d;  
            cout<<s<<endl;
            d="";
        }
        if(a[i][0]=='4')
        {
            for(j=2;j<a[i].size();j++)
            {
                d=d+a[i][j];

            }  
            if(s.find(d)==s.npos)
            {
                cout<<"−1"<<endl;
            }
            else{
                cout<<s.find(d)<<endl;
            }

            d="";
        }
       }
       if(i==q-1)
       {
            if(a[i][0]=='1')
        {
            for(j=2;j<a[i].size();j++)
            {
                s=s+a[i][j];
            }
            cout<<s;
        }
        if(a[i][0]=='2')
        {
            for(j=(int)(a[i][2]-'0');j<(int)(a[i][2]-'0')+(int)(a[i][4]-'0');j++)
            {
                d=d+s[j];
                s=d;
            }
            cout<<s;
            d="";
        }
        if(a[i][0]=='3')
        {
            for(j=0;j<=(int)(a[i][2]-'0')-1;j++)
            {
                d=d+s[j];
            }   
            for(j=4;j<a[i].size();j++)
            {
                d=d+a[i][j];
            }
            for(j=(int)(a[i][2]-'0');j<s.size();j++)
            {
                d=d+s[j];
            }
            s=d;  
            cout<<s;
            d="";
        }
        if(a[i][0]=='4')
        {
            for(j=2;j<a[i].size();j++)
            {
                d=d+a[i][j];
            }  
            if(s.find(d)==s.npos)
            {
                cout<<"−1";
            }
            else{
                cout<<s.find(d);
            }
            d="";
        }
       }
    }
    return 0;
}

by lccjsw @ 2024-08-20 15:58:08

@dlgd_start 兄弟一个入门题 你写130代码:厉害(我去给你改一下)


by Emil_ @ 2024-08-20 16:01:39

@dlgd_start

#include <bits/stdc++.h>
using namespace std;
int n,f,x,y;
string a,b,b1,b2;
int main(){
    cin>>n>>a;
    while(n--){
        cin>>f;
        if(f==1){
            cin>>b;
            a.insert(a.size(),b);
            cout<<a<<endl;
        }else if(f==2){
            cin>>x>>y;
            a=a.substr(x,y);
            cout<<a<<endl;
        }else if(f==3){
            cin>>x>>b1;
            a.insert(x,b1);
            cout<<a<<endl;
        }else if(f==4){
            cin>>b2;
            int s=a.find(b2);
            if(s!=-1)
                cout<<s<<endl;
            else
                cout<<-1<<endl;
        }
    }
    return 0;
}

by dlgd_start @ 2024-08-22 12:14:48

@Emil_ 可以问一下我的代码是哪里有问题吗


by dlgd_start @ 2024-08-22 12:15:41

@lccjsw 感谢宁TT


by lccjsw @ 2024-08-22 14:44:00

@dlgd_start 我替我兄弟给你解答一下: 1>总体来说代码过于复杂,源代码中18-78行与74-125行是重复的(本人认为没有意义)(而且很难理解)

2>细节代码: 除定义的i,j外; 其余应该定义在主函数外边; 并且这个数组定义是可有可无的

3>如a[i][0]=='1'可以简写为f==1,等; 4>原代码中IF当中会有一个for循环来支持,相比只写

cin>>b;
a.insert(a.size(),b);
cout<<a<<endl;

反而简单的多

5>最后的判断写的不是很好 注:本人不是不会写注释,而是做题的时候太懒了(某些人别在背后发帖子蛐蛐了比如F……r)


by lccjsw @ 2024-08-22 14:48:01

@lccjsw @Emil_


|