【问题描述】 str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。 【输入形式】 分行从键盘输入两个有序字符串(不超过100个字符) 【输出形式】 输出合并后的有序字符串 【输入样例】 aceg bdfh 【输出样例】 abcdefgh
时间: 2023-12-02 09:02:36 浏览: 155
以下是C++的解法:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str1[101], str2[101], res[201];
cin >> str1 >> str2;
int len1 = strlen(str1), len2 = strlen(str2);
int i = 0, j = 0, k = 0;
while (i < len1 && j < len2) {
if (str1[i] < str2[j]) res[k++] = str1[i++];
else res[k++] = str2[j++];
}
while (i < len1) res[k++] = str1[i++];
while (j < len2) res[k++] = str2[j++];
res[k] = '\0';
cout << res << endl;
return 0;
}
```
算法思想:
由于两个字符串已经有序,因此可以采用归并排序的思想进行合并。定义三个指针i、j、k,分别指向str1、str2、res的当前位置,然后比较str1[i]和str2[j]的大小,将较小的字符放入res中,并将对应指针后移。重复这个过程直到其中一个字符串遍历完,然后将另一个字符串中剩余的字符全部放入res中即可。由于C++中char数组默认以'\0'结尾,因此记得将res的最后一个字符设为'\0'。
阅读全文