0

私は C プログラミングが初めてで、現在、入力ストリーム内の単語と行をカウントし、2 つの合計を標準出力に出力できる C プログラムを作成する方法を独学しようとしています。

私がやろうとしているのは、プログラムに行数をカウントさせ、入力ストリーム内の単語数をカウントさせることです。プログラムに単語を含め、空白、タブ、改行、ハイフン、またはコロンを除外したいと考えています。プログラムに結果(単語と行)を10進数として出力させている間。

#include<stdio.h>

int main()
{
int iochar;
int words;
int lines;

printf("Enter something here:\n\n");

while ((iochar = getchar ()) !=EOF)
    {
    if((iochar == ' ') || (iochar == '\t') || (iochar == '\n'))

    putchar(iochar);
    }

return 0;
}

プログラムが標準出力で数えた単語と行の値の10進数を出力したいと思います。これは私にとってはうまくいかないようです。

4

4 に答える 4

1

lines読み取り値がの場合、 の値をインクリメントする必要があります\n単語数を数えるには、これらのソリューションを見ることができます.

wcプログラム(UNIX)を使用することもできます...

于 2012-09-26T17:28:50.990 に答える
1

switchの代わりにステートメントを使用してみて、ifいくつかのカウント ロジックを追加します。

int wordLen = 0;
while (...) {
    switch(iochar) {
    case '\n':
        lines++; // no "break" here is intentional
    case '\t':
    case ' ':
        words += (wordLen != 0);
        wordLen = 0;
        break;
    default:
        wordLen++;
        break;
    }
}
if (wordLen) words++;

この演習を詳細に説明する K&R の章があります。セクション1.5.4 単語カウントを参照してください。

于 2012-09-26T17:29:02.473 に答える
0

isspace標準ライブラリ関数とispunct;について読みたいと思うでしょう。これは、さまざまな文字値に対して明示的なテストを行うよりも簡単です (ロケールが考慮されます)。

入力を確認するときに、初期化して 0 にしてから更新する必要がありwordsますlines

if (isspace(iochar) || ispunct(iochar) || iochar == EOF)
{
  if (previous_character_was_not_space_or_punctuation)  // you'll have to figure
  {                                                     // out how to keep track 
    words++;                                            // of that on your own
  }

  if (iochar == '\n')
  {
    lines++;
  }
}
于 2012-09-26T17:33:53.347 に答える
0

AK4749 が述べたように、カウント コードはありません。

また、ifステートメントでは、スペース、タブ、または改行の場合にのみ、文字をstdoutに出力します。私はあなたが反対を望んでいると信じています。

次のようなことを試してみます。

#include "stdio.h"

int main()
{
    int iochar, words,lines;
    words=0;
    lines=0;


    printf("Enter something here:\n\n");

    while ((iochar = getchar ()) !=EOF)
    {
        if((iochar == ' ') || (iochar=='\t')) 
            words++;
        else if (iochar == '\n')
            lines++;
        else
        {
            putchar(iochar);
        }
    }
    printf("Lines: %d, Words: %d", lines, words);
    return 0;
}

私はこれをコンパイルしようとはしていませんが、そう遠くないはずです。

それが役立つことを願っています、Lefteris

于 2012-09-26T17:36:54.247 に答える