续nqsort

  1. /*  writelines函数: 写输出行*/
  2. void writelines(char *lineptr[],int nlines)
  3. {
  4.     int i;
  5.  
  6.     for(i = 0; i < nlines;++i)
  7.         printf("%s\n",lineptr[i]);
  8. }
  9.  
  10. /*  swap函数:交换v[i]和v[j]*/
  11. void swap(void *v[],int i, int j)
  12. {
  13.     void *temp;
  14.  
  15.     temp = v[i];
  16.     v[i] = v[j];
  17.     v[j] = temp;
  18. }
  19.  

YEASH!!!

刚发现有这样适合 programmer的BLOG!

就把我今天刚作的C语言的小练习方上来看看先~~

初学编程,练习是 The C programming language 里的

练习5-14

请指教...
 

  1. /*对输入文本进行排序,
  2. *nqsort -n -r
  3. *其中参数 -n 是按数值排序, -r是逆序
  4. * *exercise.5-13.in 《The C Programming Language》,page102 */
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9.  
  10. #define MAXLINES 5000
  11. char *lineptr[MAXLINES];
  12.  
  13. int readlines(char *lineptr[],int nlines);
  14. void writelines(char *lineptr[], int nlines);
  15. void swap(void *v[],int i, int j);
  16.  
  17. void nqsort(void *lineptr[],int left, int right,int argument,
  18.                 int (*comp)(void *, void *));
  19. int numcmp(char *, char *);
  20.  
  21. int main(int argc, char **argv)
  22. {
  23.     int c;
  24.     int nlines = 0;
  25.     int numeric = 0,reverse = 0;
  26.  
  27.     while(--argc > 0 && *(++argv)[0] == '-')
  28.        while((c = *++argv[0]))
  29.         switch(c){
  30.             case 'n':
  31.                 numeric = 1;
  32.                 break;
  33.             case 'r':
  34.                 reverse = 1;
  35.                 break;
  36.             default:
  37.                 printf("nnqsort: illegal option %c \n",c);
  38.                 argc = 0;
  39.                 break;
  40.        }
  41.     printf("n:%d\n r:%d\n",numeric,reverse);
  42.     if(argc != 0)
  43.         printf("Usage: nqort -n -r \n");
  44.     else{
  45.         if((nlines = readlines(lineptr,MAXLINES)) >= 0) {
  46.             nqsort((void **)lineptr,0,nlines-1,reverse,
  47.                     (int (*)(void *, void *))(numeric ? numcmp : strcmp));
  48.             writelines(lineptr, nlines);
  49.             return 0;
  50.         }else {
  51.             printf("input too big to sort\n");
  52.             return 1;
  53.         }
  54.     }   
  55.     return 0;
  56. }
  57.