ADOBE Flash Player 10
记录一下_iTalc

exersice.7-7.<The C Programming Language 2th edition>

TLHL28 posted @ Tue, 05 Aug 2008 04:12:22 +0800 in 随笔 with tags C语言 , 1475 readers

恩...这次答案里没有了...

  1. /* 修改第5章的模式查找程序,使它从一个命名文件的集合中读取输入
  2. * (有文件名参数的时候),如果没有文件名参数,则从标准输入中读取输入。
  3. * 当发现一个匹配行时,是否应该将相应的文件名打印出来
  4. * exersice.7-7.<The C Programming Language second edition>.Page 145
  5. * Usague: ./myfind -nx pattern [file_patch...]
  6. * finish time: 08/08/04
  7. * by tlhl28
  8. * */
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12.  
  13. #define MAXFILE 5
  14. #define MAXLINE 1000
  15.  
  16. int getline(char *, int);
  17.  
  18. int main(int argc, char **argv)
  19. {
  20.     typedef struct File {   /*  一个文件所包含的信息    */
  21.         FILE *fp;           /* 指向文件的指针    */
  22.         char *file_name;    /*  该文件的名字        */
  23.     } File;
  24.  
  25.     /* 文件数组 */
  26.     File afile[MAXLINE];
  27.  
  28.     char line[MAXLINE];
  29.     char *pattern;
  30.     long lineno = 0, fileno;
  31.     int c, except = 0, number = 0, found = 0;
  32.  
  33.     /*获取定义打印模式的参数*/
  34.     while (--argc > 0 && (*++argv)[0] == '-')
  35.         while ((c = *++argv[0]))
  36.             switch (c) {
  37.                 case 'x':
  38.                     except = 1;
  39.                     break;
  40.                 case 'n':
  41.                     number = 1;
  42.                     break;
  43.                 default:
  44.                     printf("myfind: illegal option %c\n", c);
  45.                     argc = -1;
  46.                     found = -1;
  47.                     break;
  48.             }
  49.     /* 需要查找的模式 */
  50.     pattern = *argv;
  51.     printf("====test message:=====");
  52.     fileno = 0;
  53.     printf("\npattern:%s\nargc before get file: %d\n",pattern, argc);
  54.     /*  获取文件    */
  55.     while (-- argc > 0 && (afile[fileno].fp = fopen(*++argv,"r")) != NULL )
  56.         afile[fileno++].file_name = *argv;
  57.  
  58.     printf("fileno: %ld; %d\n",fileno,argc);
  59.     printf("====test message:=====\n");
  60.     if (argc != 0)
  61.         printf("Usage: find -x -n pattern [file_patch...]\n");
  62.     else {
  63.         if (fileno == 0)    /*  如果没有文件        */
  64.             while (getline(line, MAXLINE) > 0) {
  65.                 lineno++;
  66.                 if ((strstr(line,pattern) != NULL) != except) {
  67.                     if (number)
  68.                         printf("%ld:", lineno);
  69.                     printf("%s", line);
  70.                     found++;
  71.                 }
  72.             }
  73.         else {  /*  对文件进行处理  */
  74.             int i;
  75.             for (i = 0; i < fileno && i < MAXFILE;i++,lineno = 0) {
  76.                 while (fgets(line,MAXLINE,afile[i].fp) != NULL) {
  77.                     lineno++;
  78.                     if ((strstr(line,pattern) != NULL) != except) {
  79.                 printf("%s:",afile[i].file_name);
  80.                         if (number)
  81.                             printf("%ld:", lineno);
  82.                         printf("%s",line);
  83.                         found++;
  84.                     }
  85.                 }
  86.                 fclose(afile[i].fp);
  87.             }
  88.         }
  89.     }
  90.     return 0;
  91. }
  92.  
  93. int getline(char *line, int max)
  94. {
  95.     if (fgets(line, max, stdin) == NULL)
  96.         return 0;
  97.     else
  98.         return strlen(line);
  99. }

Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter