编写算法,在主串s的第i个位置前插入子串t

/*2018数据结构与算法上机测试题
*15.编写算法,在主串s的第i个位置前插入子串t
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAXSIZE 100

typedef char elemtype;

typedef struct
{
	elemtype num[MAXSIZE+1];
	int length;
}SString;

void initString(SString &s)
{
	memset(s.num,0,sizeof(s.num));
	s.length=0;
}

void assignString(SString &s,char *w)
{
	int wlen=strlen(w);
	for(int i=1;i<=wlen;i++)
		s.num[i]=*w++;
	s.length+=wlen;
}

void insertString(SString &s,SString &t,int pos)
{
	int i;
	for(i=s.length;i>=pos;i--)
		if(i+t.length<=MAXSIZE)
			s.num[i+t.length]=s.num[i];
	for(i=0;i<t.length;i++)
		if(pos+i<=MAXSIZE)
			s.num[pos+i]=t.num[i+1];
	if(s.length+t.length<=MAXSIZE)
		s.length+=t.length;
	else	
		s.length=s.length+t.length-MAXSIZE;
}

int getLengthString(SString s)
{
	return s.length;
}

void printString(SString s)
{
	for(int i=1;i<=s.length;i++)
		printf("%c",s.num[i]);
	printf("\n");
}

int main()
{
	SString s1,s2;
	initString(s1);
	initString(s2);

	char str[MAXSIZE];
	printf("Input s1:");
	gets(str);
	assignString(s1,str);
	int s1_length=getLengthString(s1);

	printf("Input s2:");
	gets(str);
	assignString(s2,str);

	int pos;
	do{
		printf("Input pos:");
		scanf("%d",&pos);
	}while(pos<=0 || pos>s1_length);

	insertString(s1,s2,pos);
	printString(s1);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/JxufeCarol/article/details/85283836