题目描述
将一个字符串插入到另一个字符串当中。算法描述如下:
图:字符串插入算法
输入
输入包括多个测试样例,每个一行,包括两个字符串(stra,strb)和一个整数 i。字符串仅由英文大小写字母或数字组成。输入的字符串长度不超过127。
输出
将后一个字符串插入到前一个字符串的第i个字符前。输出插入后的结果后换行。
样例输入
strng i 4
样例输出
string
提示
收起提示[-]
提示: 由于HString是由字符指针和整数构成,因而其结构和操作相对比较简单。但是,对于输入,可能需要多余的操作了。首先使用C字符串来获取字符串,然后获得输入字符串的长度,然后再分配内存。分配的长度要比输入的字符串的长度大1,你知道的。同时上述算法插入时也要注意字符串结尾(上述算法需要补充)。 注意输入的字符串长度不大于127,但结果字符的字符串长度可能大于127。 总结: 通过熟悉这个算法,能够理解C语言字符串和C++中的string类的实现了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSTRLEN 255
typedef struct
{
char *ch;
int length;
}HString;
void InitString(HString *P);
void StrAssign(HString *P,char charc[]);
int StrInsert(HString *S,HString *T,int pos);
void print(HString *P);
void InitString(HString *P)
{
P->ch='\0';
P->length=0;
return ;
}
void StrAssign(HString *P,char charc[])
{
int i,len;
if(P->ch)
free(P->ch);
len=strlen(charc);
if(!charc)
{
P->ch='\0';
P->length=0;
}
else
{
P->ch=(char *)malloc(len*sizeof(char));
if(!P->ch)
{
exit(-1);
}
else
{
for(i=0;i<len;i++)
{
P->ch[i]=charc[i];
}
P->length=len;
}
}
return ;
}
int StrInsert(HString *S,HString *T,int pos)
{
int i;
if(pos<1||pos>S->length+1)
{
return 0;
}
S->ch=(char *)realloc(S->ch,(S->length+T->length)*sizeof(char));
if(!S->ch)
{
exit(-1);
}
for(i=S->length-1;i>=pos-1;i--)
{
S->ch[i+T->length]=S->ch[i];
}
for(i=pos-1;i<pos-1+T->length;i++)
{
S->ch[i]=T->ch[i-(pos-1)];
}
S->length=S->length+T->length;
return 1;
}
void print(HString *P)
{
int i;
for(i=0;i<P->length;i++)
{
printf("%c",P->ch[i]);
}
printf("\n");
return ;
}
int main()
{
int pos;
HString S,T;
char chara[MAXSTRLEN];
char charb[MAXSTRLEN];
while(scanf("%s%s%d",chara,charb,&pos)!=EOF)
{
InitString(&S);
InitString(&T);
StrAssign(&S,chara);
StrAssign(&T,charb);
StrInsert(&S,&T,pos);
print(&S);
}
return 0;
}