double.c
资源名称:c.rar [点击查看]
上传用户:shmaik
上传日期:2014-06-01
资源大小:45093k
文件大小:1k
源码类别:

VC书籍

开发平台:

C/C++

  1. static char rcsid[] = "$Id: H:/drh/idioms/book/RCS/intro.doc,v 1.12 1997/10/27 23:05:12 drh Exp $";
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. #include <ctype.h>
  6. #include <string.h>
  7. int linenum;
  8. int getword(FILE *, char *, int);
  9. void doubleword(char *, FILE *);
  10. int main(int argc, char *argv[]) {
  11. int i;
  12. for (i = 1; i < argc; i++) {
  13. FILE *fp = fopen(argv[i], "r");
  14. if (fp == NULL) {
  15. fprintf(stderr, "%s: can't open '%s' (%s)n",
  16. argv[0], argv[i], strerror(errno));
  17. return EXIT_FAILURE;
  18. } else {
  19. doubleword(argv[i], fp);
  20. fclose(fp);
  21. }
  22. }
  23. if (argc == 1) doubleword(NULL, stdin);
  24. return EXIT_SUCCESS;
  25. }
  26. int getword(FILE *fp, char *buf, int size) {
  27. int c;
  28. c = getc(fp);
  29. for ( ; c != EOF && isspace(c); c = getc(fp))
  30. if (c == 'n')
  31. linenum++;
  32. {
  33. int i = 0;
  34. for ( ; c != EOF && !isspace(c); c = getc(fp))
  35. if (i < size - 1)
  36. buf[i++] = tolower(c);
  37. if (i < size)
  38. buf[i] = '';
  39. }
  40. if (c != EOF)
  41. ungetc(c, fp);
  42. return buf[0] != '';
  43. }
  44. void doubleword(char *name, FILE *fp) {
  45. char prev[128], word[128];
  46. linenum = 1;
  47. prev[0] = '';
  48. while (getword(fp, word, sizeof word)) {
  49. if (isalpha(word[0]) && strcmp(prev, word)==0)
  50. {
  51. if (name)
  52. printf("%s:", name);
  53. printf("%d: %sn", linenum, word);
  54. }
  55. strcpy(prev, word);
  56. }
  57. }