1.题目
将已按升序排好的字符串a和字符串b按升序归并到字符串c中并输出。
2.代码
#include<stdio.h>
int main(void)
{
char a[100], b[100], c[200], * p;
int i = 0;
int j = 0;
int k = 0;
printf("请输入字符串a:\n");
scanf("%s", a); //输入字符串1放入a数组中
printf("请输入字符串b:\n");
scanf("%s", b); //输入字符串2放入b数组中
while (a[i] != '\0' && b[j] != '\0')
{
if (a[i] < b[j]) //判断a中字符是否小于b中字符
{
c[k] = a[i]; //如果小于,将a中字符放到数组c中
i++;
}
else
{
c[k] = b[j]; //如果不小于,将b中字符放到数组c中
j++;
}
k++;
}
c[k] = '\0'; //将两个字符串合并到c中后加结束符
if (a[i] == '\0') //判断a中字符是否全部复制到c中
{
p = b + j; //p指向数组b中未复制到c的位置
}
else
p = a + i; //p指向数组a中未复制到c的位置
strcat(c, p); //将p指向位置开始的字符串连接到c中
puts(c); //输出c
return 0;
}
3.个人见解
因为输入的字符串a和b是有序字符串,
所以对数组a和b中的元素逐个比较,
将较小的字符先放到数组c中,
直到a或b中有一个字符串全部放到c中,
再判断哪一个字符串全部复制到c中,
对没有全部复制到c中的字符串,
从未复制的位置开始将未复制到c中的字符串全部连接到c中。
这样就完成将字符串a和字符串b按升序归并到字符串c中。