使用getchar、putchar函数完成cat以及wc命令功能
C语言中的getchar以及putchar函数配合使用,可以完成许多非常有用的功能。比如今天要说的类似于linux命令cat、wc功能。
- getchar函数用于从标准输入中读取一个字符,每读取一个字符后,指针向下移动。如果遇到了字符为EOF则表示标准输入流里字符已全部读取完毕。
- putchar函数用于向标准输出中输入一个字符
cat
实现该功能比较简单,每次使用getchar读取一个字符后,就使用putchar打印该字符即可。
#include <stdio.h>
int main (void)
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
演示效果如下:
./c_cat < cat.c
#include <stdio.h>
int main (void)
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
wc
统计字符数以及行数比较简单,但统计单词数就比较复杂一点。统计单词思路如下:定义两种状态 单词中
、单词外
。每当状态从单词外变为单词中的时候,单词数就+1.
#include <stdio.h>
#define IN_WORD 1
#define OUT_WORD 0
int main (void)
{
int c;
int state = OUT_WORD;
int nc, nw, nl;
nc = nw = nl = 0;
while ( (c = getchar()) != EOF) {
nc++;
if (c == '\n') {
nl++;
}
if (c == '\n' || c == '\t' || c == ' ') {
state = OUT_WORD;
} else if (state == OUT_WORD) {
state = IN_WORD;
nw ++;
}
}
printf("chars:%d,words:%d,lines:%d\n", nc, nw, nl);
return 0;
}
演示效果如下:
# ./c_wc <<eof
> Hello, c language.
> You are my hero.
> java php
> linux mysql
> eof
chars:57,words:11,lines:4