c语言课程设计字符串,C语言课程设计(字符串排序)

任务要求

输入 n 个只由字母和数字组成的不等长字符串,对这些字符串进行排序:将每个字符串排序,输出排序结果。

不对单个字符串进行排序,将 n 个字符串排序,输出排序结果。

先对每个字符串进行排序,再将 n 个字符串排序,输出排序结果。

任务解析

这个任务咋一看不是很好理解,尤其是第二项任务和第三项任务,小但估摸着可能是老师在出题的时候没太注意相关理解性问题。其实应该这样理解:

第一项任务的意思是:将输入的每一个字符串内部进行排序(按照 ASCII 由小到大或由大到小);

第二项任务的意思是:不对每一个字符串内部排序,只针对字符串长度排序(由元素从多到少或由少到多);

第三项任务的意思是:综合上述两种任务,既对输入的每一个字符串内部排序,也对字符串长度排序。

源代码

(考虑同学们对结构体不太熟悉,因此使用二维数组)

移动端可能显示异常(显示不全),请使用电脑版访问#include

#include

#include

#include

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();

}

程序注解strcpy():百度百科

cls:CMD 清屏代码

getch():百度百科

运行图示

字符串输入

371e03c79c3e2a337f576fbb3a409ae1.png

主菜单

ea0d5c79a81a5f9ea126d96dcfe930ac.png

功能一

d3f5a7b0d2f9eb65befa1dedb8fd265b.png

功能二

8e2a7a8ed2941deb452b630a736b063b.png

功能三

7db9fa2fe4c80ca156d398c7a73751fb.png

本文由 小但 创作

全文共:4498个字

采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载,均为作者原创,转载前请务必署名

最后编辑时间为: Jun 6, 2020 at 10:18 pm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值