用c语言按以下要求编写程序按字典序排列文本对分行输入的若干字符串按字典序由小到大进行排序并输出。控制台输入多行字符串各个字符串可能含有空格。输出按字典序由小到大进行排序后的字符串。
思路: 我们可以利用字符串数组来存储输入的多行字符串,然后遍历整个字符串数组,每次比较相邻的两个字符串,如果前一个字符串大于后一个字符串,则交换它们的位置,直到整个字符串数组按字典序排列完成。
具体实现:
- 首先定义一个字符串数组,用于存储输入的多行字符串。
- 利用while循环和fgets函数从控制台逐行输入字符串,并将其存储到字符串数组中,直到输入空行为止。
- 定义一个变量flag,用于记录是否发生了交换。初始化为1,表示刚开始的时候需要进行排序。
- 利用while循环和flag变量进行遍历和排序,每次比较相邻的两个字符串,如果前一个字符串大于后一个字符串,则交换它们的位置,并将flag变量设为1,表示发生了交换。
- 如果在一轮遍历中没有发生交换,则说明整个字符串数组已经按字典序排列完成,可以跳出循环。
- 最后利用for循环输出排序后的字符串数组。
代码实现如下:
#include <stdio.h> #include <string.h>
#define MAX_SIZE 100 // 定义字符串数组的最大长度
int main() { char str[MAX_SIZE][MAX_SIZE]; // 定义字符串数组 int i, j, flag = 1; // 定义循环变量和交换标志变量
printf("请输入多行字符串,每行字符串长度不超过 %d 个字符,输入空行结束:\n", MAX_SIZE);
// 逐行输入字符串并存储到字符串数组中
i = 0;
while (fgets(str[i], MAX_SIZE, stdin) != NULL && str[i][0] != '\n') {
i++;
}
// 对字符串数组进行排序
while (flag) {
flag = 0;
for (j = 0; j < i - 1; j++) {
if (strcmp(str[j], str[j + 1]) > 0) {
char temp[MAX_SIZE];
strcpy(temp, str[j]);
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1], temp);
flag = 1;
}
}
}
// 输出排序后的字符串数组
printf("\n按字典序排列后的字符串为:\n");
for (j = 0; j < i; j++) {
printf("%s", str[j]);
}
return 0;
原文地址: https://www.cveoy.top/t/topic/fGwm 著作权归作者所有。请勿转载和采集!