1.源代码
#include <stdio.h>
#include <string.h>
#define MAX 100
int main()
{
int n,i,j;
char str[MAX][MAX];
scanf("%d", &n);
for ( i = 0; i < n; i++)
scanf("%s\n", str[i]);
for ( i = 1; i < n; i++)
for ( j = 0; j < n - i; j++)
if (strlen(str[j]) > strlen(str[j + 1]))
{
char temp[MAX];
strcpy(temp, str[j]);
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1], temp);
}
printf("Sorted result:\n");
for (i = 0; i < n; i++)
printf("%s\n", str[i]);
printf("\n");
return 0;
}
2.代码思路
#include <stdio.h>
和#include <string.h>
是两个预处理指令,用于包含标准输入输出头文件和字符串操作头文件,以便使用printf()
、scanf()
、strlen()
和strcpy()
等函数。#define MAX 100
是一个宏定义,用于定义一个常量MAX
,其值为100
,表示字符串的最大长度和数量。int main()
是程序的主函数,程序的执行从这里开始。- 函数体中,首先定义了一个二维字符数组
str[MAX][MAX]
,用于存储 n 个字符串,每个字符串的长度不超过MAX
;以及三个整数变量n
、i
和j
,用于表示字符串的数量和循环的控制变量。 - 然后使用
scanf("%d", &n)
函数,从标准输入读取一个整数,赋值给n
,表示要输入的字符串的数量。 - 接着使用一个
for
循环,从i = 0
到i < n
,每次循环中使用scanf("%s\n", str[i])
函数,从标准输入读取一个字符串,存储到数组str
的第i
行。 - 然后使用一个嵌套的
for
循环,实现冒泡排序算法,对字符串数组str
按照长度升序排序。外层循环从i = 1
到i < n
,内层循环从j = 0
到j < n - i
,每次循环中比较str[j]
和str[j + 1]
的长度,如果str[j]
的长度大于str[j + 1]
的长度,就交换它们的位置。交换的过程中,使用一个临时的字符数组temp[MAX]
,以及strcpy()
函数,实现字符串的复制。 - 最后使用一个
for
循环,从i = 0
到i < n
,每次循环中使用printf("%s\n", str[i])
函数,打印排序后的字符串数组str
的第i
行,中间用换行符分隔。打印完毕后,再使用printf("\n")
函数,输出一个空行。然后使用return 0
语句,结束主函数。
一个可能的输出样例是:这表示用户输入了 3
个字符串,分别是 hello
、world
和 hi
,排序后的结果是 hi
、hello
和 world
,按照长度从小到大排列。
输入:3
输入:hello
输入:world
输入:hi
输出:Sorted result:
输出:hi
输出:hello
输出:world