2021-11-07 字符串合并

【问题描述】
编写一个函数void  str_bin(char str1[ ], char str2[ ]), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。
【输入形式】
分行从键盘输入两个有序字符串(不超过100个字符)
【输出形式】
输出合并后的有序字符串
【输入样例】
aceg
bdfh
【输出样例】
abcdefgh
【样例说明】
输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh

【运行结果如下】

 

【代码如下】

#include<stdio.h>
#define OK 1
#define ERROR -1
#define MAXSTRLEN 255   		//用户可在255以内定义最长串长
typedef char SString[MAXSTRLEN+1];		//0号单元存放串的长度
typedef int Status;


/*赋值*/  
Status StrAssign(SString &S)
{	
	int i = 0;
	int k = 0;
	int len = 0;
	char ch[254];
	gets(ch);
	while (ch[i++] != '\0')	  len++;	//获取ch的长度
	i = 1;  
	if (len > MAXSTRLEN) 	
		return ERROR;	//串长度大于给定长度,发生截断
	else	
		while (i <= len)	S[i++] = ch[k++];						 
	S[0] = len;	
	return OK;
}

/*输出串*/
Status outputStr(SString &S)
{
	int i;
	for(i=1; i<=S[0]; i++)
		printf("%c",S[i]);
	return OK;
}

/*将串中的元素进行升序排序*/
Status sortStr(SString &S)
{
	int i, j;
	char temp;
	for (i = 1; i <= S[0]; i++) 
		for (j = 1; j <= S[0]-i; j++)
			if (S[j] > S[j+1])
			{
				temp = S[j];
				S[j] = S[j+1];
				S[j+1] = temp;
			}//if
	return OK;
}

/*合并两个有序字符串*/
Status str_bin(SString &S1,SString &S2)
{ 
	int i = 1;
	int j = 1;
	int k = 1;
	SString T;
	sortStr(S1);	//对串进行排序 
	sortStr(S2);
	while (i <= S1[0] && j <= S2[0])
	{
		if(S1[i] <= S2[j])
			T[k++] = S1[i++];
		else
			T[k++] = S2[j++];	
	}//while	
	while (i <= S1[0])	T[k++] = S1[i++];	//将S1中剩余的字符归并到T中 
	while (j <= S2[0])	T[k++] = S2[j++];	//将S2中剩余的字符归并到T中
	T[0] = S1[0] + S2[0];
	outputStr(T);	//输出串  
	return OK;
}

int main()
{
	SString S1,S2;
	StrAssign(S1);
	StrAssign(S2);				
	str_bin(S1,S2);	//合并
	return 0;
}

本文章仅供学习和参考!

欢迎交流~

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121189489