编写程序将一个子串插入到主串中

发布于:2022-10-27 ⋅ 阅读:(768) ⋅ 点赞:(0)

目录

问题描述 

完整代码 


问题描述 

【问题描述】

已有串s1和s2,利用串的基本操作实现将子串s2插入到主串s1的第i个位置。(串长不超过100)

【输入形式】

第一行输入n,表示有n组数据;

每组数据包括:

输入串s1;

输入串s2;

输入i,表示子串插入到主串中的位置。

【输出形式】

第一行输出两个字符串比较结果:s1与s2中的大者,如果相等则输出equal;

第二行输出插入结果:如果插入操作正确完成则输出插入子串后的主串,否则输出error。

【样例输入】

3

ABCDEFG

%*

2

ABCD

ABCD

4

1234567890

abc

40

【样例输出】

ABCDEFG

A%*BCDEFG

equal

ABCABCDD

abc

error

【评分标准】

填充串的基本方法并利用基本方法实现插入操作,按要求完成程序功能。

完整代码 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
typedef struct{
    char *data;
    int length;
    int stringsize;
}SqString;
//初始化
int initString(SqString *s){
    s->data=(char *)malloc(sizeof(char));
    if(!s->data) return 0;  
    s->length=0;
    s->stringsize=MAXSIZE;
    return 1;
}
//将字符串str赋值到串s中
int strAssign(SqString *s, char *str )
{
      int i=0;
      while(*str){
          s->data[i++]=*str++;
    }
    s->data[i]='\0';
    s->length=i;
    return 1;
}
//串比较
int strCompare(SqString *s,SqString *t){
      int i;
      for(i=0;i<s->length&&i<t->length;i++){
          if(s->data[i]!=t->data[i]){
              return s->data[i]-t->data[i];
        }
    }
    return s->length-t->length;
}
//在s中从pos开始取len长度的子串到sub中
int subString(SqString *sub,SqString *s,int pos,int len){
      int i,j=0;
      if(pos<1||pos>s->length||len<0||len>s->length-pos+1){
          return 0;
    }
    for(i=pos-1;i<pos-1+len;i++){
        sub->data[j++]=s->data[i];
    }
    sub->data[j]='\0';
    sub->length=j;
    return 1;
}
//将s1与s2连接到s中
int strConcat(SqString *s,SqString *s1, SqString *s2){
      int i=0,j=0;
      while(s1->length+s2->length>=s->stringsize){
          s->data=(char *)realloc(s->data,(s->stringsize+MAXSIZE)*sizeof(char));
          if(!s->data)   return 0;
          s->stringsize+=MAXSIZE;
    }
      while(i<s1->length){
          s->data[i]=s1->data[i++];
    }
    while(j<s2->length){
        s->data[i++]=s2->data[j++];
    }
    s->data[i]='\0';
    s->length=i;
    return 1;
}
//在s1中指定位置pos插入子串s2
int strInsertSub(SqString *s1,SqString *s2,int pos){
    pos=pos-1;
    if(pos<1||pos>s1->length){
        return 0;
    }
    int i;
    i=s1->length+s2->length;
    while(i+1>=s1->stringsize){
        s1->data=(char *)realloc(s1->data,(s1->stringsize+MAXSIZE)*sizeof(char));
        if(!s1->data) return 0;
        s1->stringsize+=MAXSIZE; 
    }
    s1->data[i+1]='\0';
    while(i>=pos){
        s1->data[i]=i>=pos+s2->length?s1->data[i-s2->length]:s2->data[i-pos];
        i-=1;
    }
    return 1;
}
int main(){
    SqString s1,s2;
    int pos,n,r;
    char str[MAXSIZE];
    initString(&s1);
    initString(&s2);
    scanf("%d",&n);
    while(n--){
        getchar();
        gets(str);
        strAssign(&s1,str);
        gets(str);
        strAssign(&s2,str);
        scanf("%d",&pos);
        r=strCompare(&s1,&s2);
        if(r>0)
                puts(s1.data);
        else if(r<0)
                puts(s2.data);
              else
                printf("equal\n");
        if(strInsertSub(&s1,&s2,pos))
            puts(s1.data);
        else
            printf("error\n");

    }
    return 0;
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到