C语言str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。
时间: 2024-10-28 13:12:06 浏览: 28
在C语言中,你可以通过遍历两个字符串并比较它们的字符ASCII值来实现这个功能。下面是一个简单的示例函数`merge_sorted_strings`,它会合并两个已排序的字符串:
```c
#include <stdio.h>
#include <string.h>
// 定义一个用于合并字符串并保持排序的辅助函数
void merge_sorted(char *str1, char *str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int i = 0, j = 0, k = 0;
// 使用临时数组存储合并结果,并保持排序
char temp[len1 + len2 + 1]; // 包含空字符的空间
while (i < len1 && j < len2) {
if (str1[i] <= str2[j]) {
temp[k++] = str1[i++];
} else {
temp[k++] = str2[j++];
}
}
// 如果str1还有剩余未添加,复制过去
while (i < len1) {
temp[k++] = str1[i++];
}
// 如果str2还有剩余未添加,也复制过去
while (j < len2) {
temp[k++] = str2[j++];
}
// 将合并后的字符串复制回str1
strncpy(str1, temp, sizeof(temp) - 1); // 不包括最后一个空字符
}
int main() {
char str1[100], str2[100];
printf("请输入第一个有序字符串:");
fgets(str1, sizeof(str1), stdin); // 防止换行符
str1[strlen(str1) - 1] = '\0'; // 去掉fgets留下的换行符
printf("请输入第二个有序字符串:");
fgets(str2, sizeof(str2), stdin);
str2[strlen(str2) - 1] = '\0';
merge_sorted(str1, str2);
printf("合并后的有序字符串为:%s\n", str1);
return 0;
}
```
在这个程序中,`merge_sorted`函数首先创建一个临时数组`temp`,然后分别比较`str1`和`str2`中的字符,较小的字符会被添加到`temp`中。当其中一个字符串遍历完后,将另一个字符串剩下的部分直接添加到`temp`。最后,把`temp`的内容复制回`str1`。
阅读全文