Linux オペレーティング システムには、文字数、単語数、行数をカウントするために使用される wc コマンドという非常に一般的に使用されるコマンドがあることはわかっています。今日は、C 言語を使用して同様の機能を持つプログラムを書いてみましょう (注: この記事を読むには、C 言語のある程度の基礎知識が必要です)。
このプログラムを作成するときは、getchar() と putchar() という 2 つの関数の使用法を習得する必要があります。
Getchar は標準入力から文字を読み取るために使用され、putchar は標準出力に文字を出力するために使用されます。標準入力の文字数をカウントするのは比較的簡単で、getchar関数で文字を読み込める限り、文字数をカウントする変数は1ずつ増えていきます。行数のカウントも簡単です。読み取った文字が改行文字であれば\n統計関数の変数が1ずつ増えます。
ここで一番難しいのは、単語数をどうやって数えるかです。ここでの私のアイデアは、状態変数 IN_WORD を設定することです。読み取られた文字が空白文字の場合 (スペース、水平タブ、改行はすべて空白です)ステータス値が1、読み取られても空白文字以外の文字が削除された場合、単語の統計数は変わりません。
以下、コードを投稿します
#include <stdio.h> #include <ctype.h> #define IN_WORD 1 #define OUT_WORD 0 void main (void) { int nc,nw,nl; char c,word_flag; nc = nw = nl = 0; word_flag = OUT_WORD; while ((c = getchar()) != EOF) { nc ++; if (c == '\n') { nl ++; } if (!isspace(c) && word_flag == OUT_WORD) { nw ++; word_flag = IN_WORD; } else if (isspace(c) && word_flag == IN_WORD) { word_flag = OUT_WORD; } } printf("%d\t%d\t%d\n", nc, nw, nl); }
上記のコードはまだ非常に単純ですが、3 つの変数 nc、nw、nl は文字数、単語数、単語数をカウントします。それぞれの行。 Word_flagはステータスを記録するために使用され、ステータスにはIN_WORDとOUT_WORDの2種類があります。
次に、上記のコードをテストしてみましょう。以下はテキストです:
Product-minded engineers are developers with lots of interest in the product itself. They want to understand why decisions are made, how people use the product, and love to be involved in making product decisions. They're someone who would likely make a good product manager if they ever decide to give up the joy of engineering. I've worked with many great product-minded engineers and consider myself to be this kind of developer. At companies building world-class products, product-minded engineers take teams to a new level of impact.
上のテキストは合計 86 単語、合計 5 行で構成されています。
# cat 1.txt | ./a.out 542 86 5
プログラムが文字数、単語数、行数を正常にカウントできることがわかります。
以上がC言語を使用してwcコマンドを作成します - 文字数、単語数、行数をカウントしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。