解题思路:
首先:使用一个二维字符数组来存储输入的字符串。由于n的范围是1到9,我们可以直接定义一个固定大小的二维数组。
读取输入:
- 然后读取整数n,并检查其是否在有效范围内。
- 然后使用循环读取
n
个字符串。可以使用fgets
函数来读取字符串,同时要注意处理字符串末尾可能存在的换行符。(fgets不会忽略空格及空格后面内容,而scanf会忽略)
排序字符串:选择一个合适的排序算法对字符串进行排序。由于字符串的排序通常基于字典序,我使用了strcmp
函数来比较两个字符串的大小。这里我采用了冒泡排序来实现。
代码
代码语言:javascript复制#include<stdio.h>
#include<string.h>
void Input(char p[][50], int len)
{
int i;
for (i = 0; i < len; i )
{
fgets(p[i],50,stdin);
p[i][strcspn(p[i], "n")] = 0;//移除字符末尾的换行符
}
}
void Output(char (*p)[50], int len)
{
int i;
for (i = 0; i < len; i )
//puts(p[i]);//两者效果一样
printf("%sn",p[i]);
}
void Sort(char(*p)[50], int len)//排序
{
int i = 0;
char temp[50];
for (i; i < len-1; i )
{
int j = 0;
for (j; j < len - 1 - i; j )
{
if (strcmp(p[j], p[j 1]) > 0)//使用strcmp函数来比较
{
strcpy(temp, p[j]);
strcpy(p[j], p[j 1]);
strcpy(p[j 1], temp);
}
}
}
}
int main()
{
int n = 0;
scanf("%d", &n);
char arr[10][50];
Input(arr,n);
Output(arr, n);
Sort(arr, n);
printf("排序后:n");
Output(arr, n);
return 0;
}