【题目描述】
在主程序中输入 n 个字符串,每个字符串的长度小于128。 变量 way 是进行排序的标志,1 为升序排序,0 为降序排序。 调用函数对字符串进行相应的排序, 在主函数中完成对字符串的输入和排序后的输出。 输入和输出应有相关的提示信息。
#define _CRT_SECURE_NO_WARNINGS /*防止scanf使用报错*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 3
#define MAX_SIZE 128
struct String
{
char* data;
};
void sortWay(struct String str[], int n, int way);
void inPut(struct String str[]);
void outPut(struct String str[]);
void freeMemory(struct String str[]);
void applyDynamicSpace(struct String str[]);
int main()
{
struct String str[N];
int way;
applyDynamicSpace(str); //为字符串申请空间
inPut(str); //输入字符串
printf("\n请输入排序方式(0为降序,1为升序)way = ");
while (1 == scanf("%d", &way))
{
if (way == 1)
{
printf("\n升序排序输出如下:\n");
sortWay(str, N, 1);
outPut(str);
}
else if (way == 0)
{
printf("\n降序排序输出如下:\n");
sortWay(str, N, 0);
outPut(str);
}
printf("\n(结束输入,请输Q)请输入排序方式way = ");
}
printf("\n排序结束\n");
freeMemory(str);
printf("\n");
return 0;
}
//根据way来选择排序方式
void sortWay(struct String str[], int n, int way)
{
int i, j;
char* temp;
//升序排序
if (way == 1)
{
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(str[i].data, str[j].data) > 0)
{
temp = str[i].data;
str[i].data = str[j].data;
str[j].data = temp;
}
}
}
}
else if (way == 0) //降序排序
{
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(str[i].data, str[j].data) < 0)
{
temp = str[i].data;
str[i].data = str[j].data;
str[j].data = temp;
}
}
}
}
}
//输入字符串
void inPut(String str[])
{
int i;
printf("请输入%d行字符串:\n", N);
for (i = 0; i < N; i++)
{
printf("NO . %d :", i + 1);
gets_s(str[i].data,MAX_SIZE);
}
}
//输出字符串
void outPut(String str[])
{
int i;
for (i = 0; i < N; i++)
{
printf("%s\n", str[i].data);
}
}
//释放内存
void freeMemory(String str[])
{
int i;
for (i = 0; i < N; i++)
{
free(str[i].data);
}
}
//为该结构体数组动态分配空间
void applyDynamicSpace(String str[])
{
int i;
for (i = 0; i < N; i++)
{
str[i].data = (char *)malloc(sizeof(char) * MAX_SIZE);
}
}
有误请大家指正,或者有更好的写法也可以进行交流。