1 条题解

  • 0
    @ 2025-4-12 21:52:30

    C :

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    main(){
    	int n,i,len,k1,k2,j;
    	char s[101],temp,ins[101];
    	while(scanf("%s",s)!=EOF){
    		scanf("%d",&n);
    		while(n--){
    			scanf("%s",&ins);
    			k1=ins[1]-'0';
    			k2=ins[2]-'0';
    			if('0'==ins[0]){
    				for(i=k1,j=k2+k1-1;j>=i;i++,j--){
    					temp=s[i];
    					s[i]=s[j];
    					s[j]=temp;
    				}
    				printf("%s\n",s);
    			}
    			if('1'==ins[0]){
    				for(i=k1,j=0;j<k2;j++,i++)
    					s[i]=ins[j+3];
    				printf("%s\n",s);
    			}
    		}
    	}
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<ctype.h>
    
    
    void reverse(char a[],int start,int len);
    void tihuan(char a[],char b[],int start,int len);
    
    
    int main()
    {
        char string[200];
        int n;
        char **cmd;
        int i;
        while(gets(string)!=NULL)
        {
          scanf("%d",&n);
          cmd=(char**)malloc(sizeof(char*)*n);
          for(i=0;i<n;i++)
          {
            cmd[i]=(char*)malloc(sizeof(char)*104);
          }
    
          getchar();
    
          for(i=0;i<n;i++)
          {  
             gets(cmd[i]);
             
          } 
          //判断类型 
          for(i=0;i<n;i++)
          {
             if(cmd[i][0]=='0')
             { 
                // if(strlen(cmd[i])==3)
                 reverse(string,cmd[i][1]-'0',cmd[i][2]-'0');
                // else if(strlen(cmd[i])==5)
                // reverse(string,(cmd[i][1]-'0')*10+(cmd[i][2]-'0'),(cmd[i][3]-'0')*10+(cmd[i][4]-'0'));
                // else if(strlen(cmd[i])==4)
                // reverse(string,cmd[i][1]-'0',(cmd[i][2]-'0')*10+(cmd[i][3]-'0'));
             }
             else
                tihuan(string,cmd[i],cmd[i][1]-'0',cmd[i][2]-'0');
          }
          
          for(i=0;i<n;i++)
         {
            free(cmd[i]);
         } 
         
         free(cmd);
         
        }
        
        return 0;
    } 
    
    void reverse(char a[],int start,int len)
    {
         int temp1=len/2;//中间位置 
         int i,j,k;
         char temp2;
         for(i=start,j=start+len-1,k=0;k<temp1;k++)
         {
            temp2=a[i];
            a[i++]=a[j];
            a[j--]=temp2;
            
         }
        puts(a); 
         
    }
    void tihuan(char a[],char b[],int start,int len)
    {
        //判断被覆盖的字符数量,和要覆盖的字符数量之间的大小关系,
        //分成3种情况处理,
        //若大于,则往前挪
        //若小于,则往后挪
        //若相等,无需挪动
        int total_b=strlen(b)-3;
        int i;
        int a_move; 
        int gap;
        if(len==total_b)
        {
           for(i=0;i<len;i++)
           {
              a[start+i]=b[3+i];
           }
        } 
        else if(len<total_b)
        {
             gap=total_b-len;
             a_move=start+len;
             for(i=strlen(a);i>=a_move;i--)
             {
                a[i+gap]=a[i];
             }  
              for(i=0;i<total_b;i++)
              {
                 a[start+i]=b[i+3];
              }
              
        }
        else 
        {
          gap=len-total_b;
          for(i=len+start;i<=(int)strlen(a);i++) 
          {
              a[i-gap]=a[i];
          }
          for(i=0;i<total_b;i++) 
          {
            a[start+i]=b[3+i];
          }
        }
          
            puts(a);
        
    }
    
    • 1

    信息

    ID
    2111
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者