北航计算机机试07排序10归并字符串
将两个升序字符串合并成一个升序字符串,相同的字母,出现一次。
!!!!又出了同样的题!!!
个人认为:首先输入的一定是升序的字符串,所以没有重复的字母,那么相同的字母只有在比较的时候才能发现,两个升序的字符串合并成一个字符串,是属于线性表的归并排序
可以用数组来存储线性表,代码如下
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char b[100];
char c[100];
while(scanf("%s",a)!=EOF)
{
scanf("%s",b);
int a_len=strlen(a);
int b_len=strlen(b);
int i=0;
int j=0;
int k=0;
while((i<a_len)&&(j<b_len))//ab均非空
{
if(a[i]<b[j])
{
c[k]=a[i];
i++;
}else if(a[i]>b[j]){
c[k]=b[j];
j++;
}else{
c[k]=a[i];
i++;
j++;
}
k++;
}
while(i<a_len)
{
c[k]=a[i];
k++;
i++;
}
while(j<b_len)
{
c[k]=b[j];
k++;
j++;
}
for(i=0;i<k;i++)
{
printf("%c",c[i]);
}
printf("\n");
}return 0;
}
也可以用链表来存储线性表,即线性链表
void mergelist(linklist &la,linklist &lb,linklist &lc)
{
pa=la->next; pb=lb->next;
lc=pc=la;
while(pa&&pb){
if(pa->data <=pb->data){
pc->next=pa;pc=pa;pa=pa->next;
}
else { pc->next=pb; pc=pb;pb=pb->next;}
}
pc->next=pa?pa:pb;
free(lb);
}