私はこのコードをnoにするために実装しました。単語数のそれは私が入力として"q w r "
を入力すなわちあれば、それは私に3つの言葉を与え、すべての単一の文字のため正常に動作しますが、私は、入力として"qwe ed df "
入力すると、それはあなたのコードに問題があなたの散乱される2文字列を使わないで単語の総数を数えるには?
#include<stdio.h>
int main()
{
int c=getchar();
int words=0;
while(c!=EOF)
{
if(c==' ' || c=='\n')
{
c=getchar();
}
else if(c>='a' && c<='z')
{
c=getchar();
if(c==' ')
{
words=words+1;
c=getchar();
}
else
{
c=getchar();
}
}
}
printf("%i\n",words);
}
など、数字に対処するためのコード、句読点を調整することができます - あなたは信用を得ます偶然にも 'int c;'と 'char c;'ではなく、そしてループの中では '私は単語である 'ということを追跡します。もしあなたが言葉を読んでいて、スペースを読んでいないなら、あなたはまだ言葉にしています。あなたが単語を書いていて、スペースを読んでいるなら、あなたは単語を終えました(そして、もはや単語ではありません)。あなたが言葉ではなく、空白以外の文字を取得した場合、あなたは今言葉にしています。単語カウンタをインクリメントします。あなたが一言も言わずにスペースを取れば、あなたはまだ言葉ではありません。 ''ヘッダには文字分類マクロがあります。 –
読み込みは1か所で、先読みと 'ungetc'です。 – BLUEPIXY
ファイルが大きい場合は、読み込みをバッファリングすることを検討してください(例えば 'char buf [1024] =" "; while(fgets(buf、1024、stdin)){char * p = buf; [ここでのあなたのロジック]})。その理由は、メモリー内での操作は、一度にファイルI/Oよりも1桁高速です。 (あなたはあなたの 'buf'サイズを意味のあるものに選ぶことができます。バッファーが8文字であれば、かなりの改善が見られます) –