単語の抽出のCプログラム

テキストファイル中から単語を抜き出すCプログラム。数字から始まるものは疑似単語として排除している。

extractWord.c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char fname[256]; /*ファイル名*/
    FILE *fp;        /*ファイルストリーム*/
    int ch,oldch=0;          /*読み込んだ文字*/
    int NowInWord=0; /*単語検出中は1,疑似単語検出中は-1,そうでない時は0*/
    int count=0;     /*見つけた単語の数*/
    printf("file name : ");
    gets(fname);
   
    fp=fopen(fname,"r");
    if (fp==NULL) {
        printf("can't open %s\n",fname);
        exit(1);
    }
   
    while ((ch=fgetc(fp)) != EOF) {
        /*ファイルから1文字読み込んでchに代入して,それがEOFでなかったら*/
        if (NowInWord==1) { /*単語読み込み中ならば*/
            if (isalnum(ch)||ch=='_') { /*chがアルファベット,数字または_だったら*/
                putchar(ch);
            } else { /*単語の外に出たぞ*/
                NowInWord=0;
                count++;
                if (count%8==0) { /*8回に一回改行したいなー*/
                    printf("\n");
                } else {
                    printf(" ");
                }
            }
        } else if (NowInWord==-1) { /*疑似単語読み込み中ならば*/
            if (isalnum(ch)||ch=='_') { /*chがアルファベット,数字または_だったら*/
            } else { /*疑似単語の外に出たぞ*/
                NowInWord=0;
            }
        } else { /*単語読み込み中でないならば*/
            if (isalpha(ch)) { /*chがアルファベットだったら*/
                if (isdigit(oldch)) {
                    NowInWord=-1;
                } else {
                    NowInWord=1;
                    putchar(ch);
                }
            }
        }
        oldch=ch;
    }
   
    fclose(fp);
}

/*
対象としたtest.c
------------------------------------------------------
#include <stdio.h>

int main()
{
    printf("Hello. How are you?\n");
    printf("Fine, thanks. And You?\n");
    printf("So so.\n");
    return 0;
}
------------------------------------------------------

実行結果
>extractWord.exe
file name : test.c
include stdio h int main printf Hello How
are you n printf Fine thanks And You
n printf So so n return



対象としたtest.txt
------------------------------------------------------
1234 ..wer qwe123+wer456
sw_qwe,q12_12,12qwe,A123B123
wsed_123

------------------------------------------------------

実行結果
>extractWord.exe
wer qwe123 wer456 sw_qwe q12_12 A123B123 wsed_123


*/