巧妙的字符串排序

    xiaoxiao2021-04-15  26

    /*    sort_str.c -- 读入字符串,并排序字符串 */ #include <stdio.h> #include <string.h> #define        SIZE    81    /* 限制字符串长度, 包括 \0 */ #define        LIM        20    /* 可读入的最多行数 */ #define     HALT    ""    /* 空字符串停止输入 */ void stsrt(char *string [], int num);        /* 字符串排序函数 */ char * s_gets (char * st, int n); int main(int argc, const char *argv[]) {     char     input[LIM] [SIZE];       /* 储存输入的数组 */     char    *ptstr[LIM];                      /* 内含指针变量的数组*/         int    ct = 0;                                     /*  输入计数 */     int k;                                            /*  输出计数 */              printf("Iuput up to %d lines, and I will sort them.\n", LIM);     printf("TO stop, press the Enter key at a line's start.\n");     while (ct < LIM && s_gets(input[ct], SIZE ) != NULL && input[ct][0] != '\0')     {         ptstr[ct] = input[ct];  /* 设置指针指向字符串 */         ct++;         }     stsrt(ptstr, ct);    /* 字符串排序函数 */     puts("\nHere's the sorted list:\n");     for (k = 0; k < LIM; k++)         puts (ptstr[k]);   /* 排序后的指针 */          return 0; } /* 字符串--指针--排序函数*/ /*    核心算法 */ void stsrt(char *string [], int num) {     char *temp;     int top, seek;     for (top = 0; top < num - 1; top++)   /* 遍历输入的字符串数组*/         for (seek = top + 1; seek < num; seek++)             if (strcmp(string[top],string[seek])    >  0) /*排序算法*/             {                 temp = string[top];                 string[top] = string[seek];                 string[seek] = temp;             } } char * s_gets (char * st, int n) {     char * ret_val;     int i = 0;     ret_val = fgets (st, n, stdin);     if (ret_val)     {         while (st[i] != '\n' && st [i] != '\0')             i++;         if (st[i] = '\n')             st[i] = '\0';         else             while ( getchar() != '\n')                 continue;     }     return ret_val; } /*总结:该程序的巧妙之处在于排序的是指向字符串的指针,而不是字符串本身*/
    转载请注明原文地址: https://ju.6miu.com/read-671838.html

    最新回复(0)