words.c
上传用户:shmaik
上传日期:2014-06-01
资源大小:45093k
文件大小:1k
- /*
- This version of ids uses Text and Ring,
- and reads the identifiers from right to left.
- This version is a circuitous solution to Exercise 16.1.
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include "fmt.h"
- #include "ring.h"
- #include "text.h"
- #include "mem.h"
- int main(int argc, char *argv[]) {
- char buf[512];
- Text_save_T save = Text_save();
- Ring_T ring = Ring_new();
- Text_T first = Text_cat(Text_cat(Text_ucase, Text_lcase), Text_box("_", 1));
- Text_T rest = Text_cat(first, Text_digits);
- Fmt_register('T', Text_fmt);
- while (fgets(buf, sizeof buf, stdin) != NULL) {
- Text_T line = Text_put(buf), *id;
- int j = 0;
- while ((j = Text_rupto(line, 1, j, first)) > 0) {
- int i = Text_rmany(line, 1, j + 1, rest);
- NEW(id);
- *id = Text_sub(line, i, j + 1);
- Ring_addlo(ring, id);
- j = i;
- }
- while (Ring_length(ring) > 0) {
- id = Ring_remlo(ring);
- Fmt_print("%Tn", id);
- FREE(id);
- }
- }
- Ring_free(&ring);
- Text_restore(&save);
- return EXIT_SUCCESS;
- }