40分求助,一道题写了一天...
查看原帖
40分求助,一道题写了一天...
785140
perfectbit222楼主2022/9/23 11:54
//洛谷P5734in数组 
//求助操作3 
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int q,doo,a,b,c=0,d=0,e=0,f=0,g=0,h=0,len,len2,len3,len4,lena,lenb,lenc;
	cin>>q;
	char str[10000]={};
	//所以为什么字符串数组可以这样用呢。。。 明明在debug里显示只有str【0】被占用 
	cin>>str;
	for(int x=1;x<=q;x++)
	{
		cin>>doo;
		if(doo==1)
		{
			char str2[10000]={};
			cin>>str2;
			//还需获取str长度把str2塞进去,题目顺承关系 
			len=strlen(str);
			len2=strlen(str2);//获取长度的函数 
			for(int xx=1;xx<=len2;xx++)//要把len2赛到len后面捏
			{
				str[len]=str2[c];
				c++;
				len++;
			} 
			cout<<str<<endl;//这样str得到了更改 
		}//doo1 ok
		else if(doo==2)
		{
			cin>>a>>b;
			for(int aa=1;aa<=b;aa++)//读入数据 
			{
				str[d]=str[a];
				a++;
				d++;//向前回滚填充 
			}
			len3=strlen(str);
			for(int aaa=1;aaa<=len3+1;aaa++)
			{
				str[b]=0;
			} 
			cout<<str<<endl;
		}//doo2 ok
		else if(doo==3)
		//S1先把a和a后面的一串暂存
		//S2暂存a前面前面一串 
		//S3最后整体和并输出 
		{
			//!S1 start 
			char str3[10000]={};
			char str4[10000]={};
			char str5[10000]={};
			cin>>e>>str3;//输入str3 
			len4=strlen(str);
			f=len4-e+1;//开始暂存的数 
			for(int yy=e;yy<=len4;yy++)
			{
			     str4[g]=str[f];//进入暂存数组str4 
			     g++;
			     f++;
			}
			//将a及a后面的一串暂存为str4 ok 
			//!s1 end
			//!s2 start
			g=0;
			f=len4-e+1;
			for(int yyy=0;yyy<f;yyy++)//开始将a前面的进入暂存数组str5
			{
				str5[g]=str[yyy];
				g++; 
			} 
			//!s2 end
			//!s3 start
			lenb=strlen(str3);
			lenc=strlen(str4);
			lena=strlen(str5);
			//三个片段str5-str3-str4注入str
			for(int yyyy=0;yyyy<lena;yyyy++)
			{
				str[h]=str5[yyyy];
				h++;
			}
			for(int z=0;z<lenb;z++)
			{
				str[h]=str3[z];
				h++;
			}
			for(int zz=0;zz<lenc;zz++)
			{
				str[h]=str4[zz];
				h++;
			}
			cout<<str<<endl;
		}//doo3 ok
		else if(doo==4)
		{
			char str6[100001]={};
            int i,j,ans=-1;
            bool flag;
             cin>>str6;
             for(i=0;i<strlen(str)-strlen(str6)+1;i++){//注意不要越界
            	j=0;
	            flag=false;
            	while(str[i]==str6[j] && j<strlen(str6)){
		        flag=true;//能找到就记为true
		         i++;//继续往下判断是否相同
		         j++;
	            }
 	            if(j==strlen(str6)){//能在s中找到完整的str
		       ans=i-j;//因为i已经往后了j个,所以要减去j
		       break;
	           }
	            if(flag)
				{
	           	i--;
	            }
               }
               cout<<ans<<endl;
		}
	}
}
2022/9/23 11:54
加载中...