Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define STATE_START 0
- #define STATE_INWORD 1
- #define STATE_INSPACE 2
- #define STATE_DISPLAY 3
- #define STATE_END 4
- typedef int State;
- int main(int argc, const char *argv[])
- {
- FILE *f;
- int cc = 0, wc = 0, lc = 0;
- char ch = 0;
- State state = STATE_START;
- if(argc > 2) {
- fprintf(stderr, "Usage:wc [filename]\n");
- fprintf(stderr, " :wc < filename\n");
- exit(1);
- }
- if(argc == 2) {
- f = fopen(argv[1], "r");
- if(f == NULL){
- fprintf(stderr, "Can't read %s\n", argv[1]);
- exit(1);
- }
- }else if(argc == 1) {
- f = stdin;
- }
- while(1){
- if(state == STATE_START){
- ch = getc(f);
- state = STATE_INSPACE;
- }
- if(state == STATE_INWORD){
- if(ch == EOF){
- state = STATE_DISPLAY;
- }else if(ch == '\n'){
- ch = getc(f);
- cc++;
- wc++;
- lc++;
- state = STATE_INSPACE;
- }else if(ch == '\t' || ch == ' '){
- ch = getc(f);
- cc++;
- wc++;
- state = STATE_INSPACE;
- }else{
- ch = getc(f);
- cc++;
- state = STATE_INWORD;
- }
- }else if(state == STATE_INSPACE){
- if(ch == EOF){
- state = STATE_DISPLAY;
- }else if(ch == '\n'){
- ch = getc(f);
- cc++;
- lc++;
- state = STATE_INSPACE;
- }else if(ch == '\t' || ch == ' '){
- ch = getc(f);
- cc++;
- state = STATE_INSPACE;
- }else{
- ch = getc(f);
- cc++;
- state = STATE_INWORD;
- }
- }else if(state == STATE_DISPLAY){
- printf("%d %d %d\n", lc, wc, cc);
- state = STATE_END;
- }else if(state == STATE_END){
- break;
- }else{
- fprintf(stderr, "error\n");
- exit(1);
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment