任务要求
输入 n 个只由字母和数字组成的不等长字符串,对这些字符串进行排序:
- 将每个字符串排序,输出排序结果。
- 不对单个字符串进行排序,将 n 个字符串排序,输出排序结果。
- 先对每个字符串进行排序,再将 n 个字符串排序,输出排序结果。
任务解析
这个任务咋一看不是很好理解,尤其是第二项任务和第三项任务,小但估摸着可能是老师在出题的时候没太注意相关理解性问题。其实应该这样理解:
第一项任务的意思是:将输入的每一个字符串内部进行排序(按照 ASCII 由小到大或由大到小);
第二项任务的意思是:不对每一个字符串内部排序,只针对字符串长度排序(由元素从多到少或由少到多);
第三项任务的意思是:综合上述两种任务,既对输入的每一个字符串内部排序,也对字符串长度排序。
源代码
(考虑同学们对结构体不太熟悉,因此使用二维数组)
移动端可能显示异常(显示不全),请使用电脑版访问
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
int Num, Button;
char arr[1005][1005];
char brr[1005][1005];
char crr[1005][1005];
char temp, ArrTemp[1005];
int NumTemp;
int MainMenu(void);
void NoLenButSort(void);
void NoSortButLen(void);
void SortAndLen(void);
int MainMenu(void) {
system("cls");
printf("功能:\n");
printf("1)不排序字符串长度,排序每个字符串\n");
printf("2)不排序单个字符串,按字符串长度排序\n");
printf("3)先排序每个字符串,然后按字符串长度排序\n");
printf("4)退出程序\n");
printf("请选择:\n");
Button = getch() - '0';
system("cls");
switch (Button) {
case 1:
NoLenButSort();
break;
case 2:
NoSortButLen();
break;
case 3:
SortAndLen();
break;
case 4:
exit(1);
default:
printf("请输入0-3之间的数字\n");
system("pause");
MainMenu();
}
}
void NoLenButSort(void) {
system("cls");
for (int i = 0; i < Num; ++i) {
for (int j = 0; crr[i][j] != '\0'; ++j) {
for (int k = 0; crr[i][k + 1] != '\0'; ++k) {
if (crr[i][k] > crr[i][k + 1]) {
temp = crr[i][k];
crr[i][k] = crr[i][k + 1];
crr[i][k + 1] = temp;
}
}
}
}
printf("排序后:\n");
for (int i = 0; i < Num; ++i) {
printf("%d)%s\n", i+1, crr[i]);
}
printf("请按下【任意按键】返回主菜单");
if (getch()) MainMenu();
}
void NoSortButLen(void) {
system("cls");
for (int i = 0; i < Num; ++i) {
for (int j = 0; j < Num - 1; ++j) {
if (strlen(arr[j]) > strlen(arr[j + 1])) {
strcpy(ArrTemp, arr[j]);
strcpy(arr[j], arr[j + 1]);
strcpy(arr[j + 1], ArrTemp);
}
}
}
printf("排序后:\n");
for (int i = 0; i < Num; ++i) {
printf("%d)%s\n", i + 1, arr[i]);
}
printf("请按下【任意按键】返回主菜单");
if (getch()) MainMenu();
}
void SortAndLen(void) {
system("cls");
for (int i = 0; i < Num; ++i) {
for (int j = 0; brr[i][j] != '\0'; ++j) {
for (int k = 0; brr[i][k + 1] != '\0'; ++k) {
if (brr[i][k] > brr[i][k + 1]) {
temp = brr[i][k];
brr[i][k] = brr[i][k + 1];
brr[i][k + 1] = temp;
}
}
}
}
for (int i = 0; i < Num; ++i) {
for (int j = 0; j < Num - 1; ++j) {
if (strlen(brr[j]) > strlen(brr[j + 1])) {
strcpy(ArrTemp, brr[j]);
strcpy(brr[j], brr[j + 1]);
strcpy(brr[j + 1], ArrTemp);
}
}
}
printf("排序后:\n");
for (int i = 0; i < Num; ++i) {
printf("%d)%s\n", i + 1, brr[i]);
}
printf("请按下【任意按键】返回主菜单");
if (getch()) MainMenu();
}
int main() {
printf("请输入需要排序字符串的组数:\n");
scanf("%d", &Num);
for (int i = 0; i < Num; ++i) {
printf("请输入字符串 %d ,按【回车键】进入下一步:\n", i + 1);
scanf("%s", arr[i]);
strcpy(brr[i], arr[i]);
strcpy(crr[i], arr[i]);
}
MainMenu();
}
程序注解
运行图示
本文由 小但 创作
全文共:4498个字
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载,均为作者原创,转载前请务必署名
最后编辑时间为: Jun 6, 2020 at 10:18 pm