目录
问题描述
【问题描述】
已有串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;
}