C语言课程设计(字符串排序)
in C笔记大学生活课程设计 with 0 comment

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

in C笔记大学生活课程设计 with 0 comment

任务要求

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

  1. 将每个字符串排序,输出排序结果。
  2. 不对单个字符串进行排序,将 n 个字符串排序,输出排序结果。
  3. 先对每个字符串进行排序,再将 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();
}

程序注解

  1. strcpy()百度百科
  2. cls:CMD 清屏代码
  3. getch()百度百科

运行图示

字符串输入
tcA1eK.md.jpg
主菜单
tcAMsx.md.jpg
功能一
tcAKQ1.md.jpg
功能二
tcAnzR.md.jpg
功能三
tcAQL6.md.jpg

本文写作于 1年前,文章内容可能已经与事实不符,如有疑问,请咨询作者。

留言: