题目描述 已知两个字符a和b中的字符已经按照升序排序,将两个字符串a和b合并到字符串c中,使得c串中的字符仍然有序 方法1: a和b并入c,再对c排序 方法2: 把a和b中的字符逐个有序的放入c中 方法3: 把a数组放入c中,再将b中的字符逐个插入c合理的位置上。 注意:字符串函数gets,puts 输入 第一行输入字符串a 第二行输入字符串b 输出 字符串c 样例输入 aceg bdfgh 样例输出 abcdefggh用C语言#include <stdio.h> #include <string.h> void merge(char p[],char q[],char r[]); int main() { char a[1000],b[1000],c[2000]; gets(a); gets(b); merge(a,b,c); puts(c); } @@1 @@1帮我补充好
时间: 2024-01-11 17:04:36 浏览: 70
完整的代码如下:
```c
#include <stdio.h>
#include <string.h>
void merge(char p[],char q[],char r[]) {
int i=0,j=0,k=0;
int len1=strlen(p),len2=strlen(q);
while(i<len1 && j<len2) {
if(p[i]<q[j]) {
r[k++]=p[i++];
} else {
r[k++]=q[j++];
}
}
while(i<len1) {
r[k++]=p[i++];
}
while(j<len2) {
r[k++]=q[j++];
}
}
int main() {
char a[1000],b[1000],c[2000];
gets(a);
gets(b);
merge(a,b,c);
puts(c);
return 0;
}
```
解释一下代码:
- 在函数 `merge` 中,我们使用归并排序的思想。首先设置三个指针 `i`、`j`、`k`,分别指向数组 `p`、`q`、`r` 的开头。然后比较 `p[i]` 和 `q[j]` 的大小,如果 `p[i] < q[j]`,就将 `p[i]` 放入 `r` 数组中,并将指针 `i` 和 `k` 向右移一位,否则将 `q[j]` 放入 `r` 数组中,并将指针 `j` 和 `k` 向右移一位。最后,如果 `p` 数组或 `q` 数组中还有剩余的元素,就将它们全部放入 `r` 数组中。
- 在 `main` 函数中,我们定义了三个字符数组 `a`、`b`、`c`,并使用 `gets` 函数分别读入 `a`、`b` 数组。然后调用 `merge` 函数将 `a`、`b` 数组合并到 `c` 数组中。最后,使用 `puts` 函数输出合并后的 `c` 数组。
PS:`gets` 函数已经被标记为不安全,建议使用更安全的函数 `fgets` 来读取字符串。
阅读全文