Kindergarten Counting Game
Everybody sit down in a circle. Ok. Listen to me carefully.
``Woooooo, you scwewy wabbit!''
Now, could someone tell me how many words I just said?
Input and Output
Input to your program will consist of a series of lines, each line containing multiple words (at least one). A ``word'' is defined as a consecutive sequence of letters (upper and/or lower case).
Your program should output a word count for each line of input. Each word count should be printed on a separate line.
Sample Input
Meep Meep! I tot I taw a putty tat. I did! I did! I did taw a putty tat. Shsssssssssh ... I am hunting wabbits. Heh Heh Heh Heh ...
Sample Output
2 7 10 9
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX 100000 char word[MAX]; int main() { int i,j; int len; long int count=0; int inword=0; while(fgets(word,sizeof(word),stdin)) { len=strlen(word); count=0; for(i=0; i<len; i++) { if(isalpha(word[i])) inword=1; else { if(inword) { count++; inword=0; } } } printf("%ld\n",count); } return 0; }
要点一:记录单词个数
要点二:注意什么是单词,只有一个字母不是单词
要点三:输入含空格的一行,也可以逐个字母读取,不过比较麻烦
要点四:fgets
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
数 (ISO C)编辑函数原型:char *fgets(char *buf, int bufsize, FILE *stream);参数:*buf: 字符型指针,指向用来存储所得数据的地址。bufsize: 整型数据,指明存储数据的大小。*stream: 文件结构体指针,将要读取的文件流。