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

VC书籍

开发平台:

C/C++

  1. /*
  2. This version of ids uses Text and Ring,
  3. and reads the identifiers from right to left.
  4. This version is a circuitous solution to Exercise 16.1.
  5. */
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include "fmt.h"
  9. #include "ring.h"
  10. #include "text.h"
  11. #include "mem.h"
  12. int main(int argc, char *argv[]) {
  13. char buf[512];
  14. Text_save_T save = Text_save();
  15. Ring_T ring = Ring_new();
  16. Text_T first = Text_cat(Text_cat(Text_ucase, Text_lcase), Text_box("_", 1));
  17. Text_T rest  = Text_cat(first, Text_digits);
  18. Fmt_register('T', Text_fmt);
  19. while (fgets(buf, sizeof buf, stdin) != NULL) {
  20. Text_T line = Text_put(buf), *id;
  21. int j = 0;
  22. while ((j = Text_rupto(line, 1, j, first)) > 0) {
  23. int i = Text_rmany(line, 1, j + 1, rest);
  24. NEW(id);
  25. *id = Text_sub(line, i, j + 1);
  26. Ring_addlo(ring, id);
  27. j = i;
  28. }
  29. while (Ring_length(ring) > 0) {
  30. id = Ring_remlo(ring);
  31. Fmt_print("%Tn", id);
  32. FREE(id);
  33. }
  34. }
  35. Ring_free(&ring);
  36. Text_restore(&save);
  37. return EXIT_SUCCESS;
  38. }