Cとシステムプログラミングを学んでいます。テキストファイルを読み込んで単語を小文字で出力しようとしています。英字以外の文字はすべて区切り文字になります。以下の出力を取得しています。誰かが私のコードを見て、単語間の行を削除する方法についてのヒントを教えてもらえますか? ありがとうございました!
これが私のテキストファイルの始まりです:
The Project Gutenberg EBook of The Iliad of Homer, by Homer
この eBook は、誰でもどこでも無料で、ほとんど制限なく使用できます。この電子ブックまたはオンライン www.gutenberg.org に含まれるプロジェクト グーテンベルク ライセンスの条件に基づいて、コピー、譲渡、または再利用することができます。
タイトル: ホメロスのイリアス
作者:ホーマー
翻訳者: Andrew Lang, MA, Walter Leaf, Litt.D., And Ernest Myers, MA
投稿日: 2012 年 1 月 14 日 [EBook #3059] リリース日: 2002 年 2 月
言語: 英語
これが私の出力です: ホメロスのイリアスのプロジェクトグーテンベルク電子ブック
ホーマーによって
この電子ブックは、誰でもどこでも無料で、ほとんど制限なく使用できます。
あなたはそれをコピーすることができます
この電子ブックに含まれているプロジェクト グーテンベルク ライセンスの条件の下で、または www グーテンベルク org でオンラインで、譲渡または再利用してください。
題名
ホメロスのイリアス
著者
ホーマー
翻訳者
アンドリュー・ラング
ま
ウォルター・リーフ
リット・ド
アーネスト・マイヤーズ
ま
郵送日
一月
電子ブック
発売日
2月
言語
英語
..........
これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#define SIZE 256
int end_line(FILE *file, int c)
{
int endLine = (c == '\r' || c == '\n');
if (c == '\r')
{
c = getc(file);
if (c != '\n' && c != EOF)
ungetc(c, file);
}
return endLine;
}
int get_word(FILE *file, char *word, size_t wordSize)
{
size_t i = 0;
int c;
//skip non-alpha characters
while ((c=fgetc(file)) != EOF && !isalpha(c) && isspace(c)){
; //do nothing
}
if (c != EOF)
word[i++] = c;
//read up to the next non-alpha character and store it to word
while ((c=fgetc(file)) != EOF && i < (wordSize - 1) && isalpha(c) && !end_line(file, c))
{
c=tolower(c);
word[i++] = c;
}
word[i] = 0;
return c != EOF;
}
//Main Function
int main (int argc, char **argv)
{
char *input = argv[1];
FILE *input_file;
char word[SIZE];
input_file = fopen(input, "r");
if (input_file == 0)
{
//fopen returns 0, the NULL pointer, on failure
perror("Canot open input file\n");
exit(-1);
}
else
{
while (get_word(input_file, word, sizeof(word)))
{
//do something with word;
printf("%s\n", word);
}
}
fclose(input_file);
return 0;
}