代码文本:
#include "stdio.h"
int main(int argc,char *argv[]){
char s[300];
int i,k,w;
printf("Please enter a string...\n");
fgets(s,300,stdin);
for(w=i=0;s[i];i++)
if(s[i-1]==' ' && (k=s[i]|0x20)>='a' && k<='z' || i==0)
w++;
printf("%d\n",w);
return 0;
}
用数组存储输入的字符,由于有n行,就定义多维数组,然后通过不断读取单词,但遇到空格,则计数加1,最后遇到'\0'字符,再加1即可得到单词数。
这类统计的解决办法是:扫描输入的字符流,把字符分为单词符号、单词分隔符号两类,设置一个状态标志,初始化状态标志为单词分隔符状态,当遇到与状态不同的输入时候改变一下状态,在从分隔符状态改变为单词符号状态时扫描的单词数量+1,这样在多个分隔符连续出现时不会造成统计结果的错误增加。
一般单词符号为字母和连字符,其它符号作为分隔符,也可以按照题目要求的只把空白(空格、制表、回车、换行)作为分隔符。
程序代码如下(没有联机调试,如果遇到小的语法问题可以追问):
#include
main()
{
int words=0,flag=0;
char c;
while((c=getchar())!=EOF)/*表示一直读取字符,直到输入结束,UNIX是CTRL+D,DOS系统是CTRL+Z,不同的编译环境这个判断可以需要修改*/
{
if (c==32 || c==9 || c==10 || c==13)
{
if (flag==1) flag=0;
}
else
{
if (flag==0){flag=1;words++;}
}
}
printf("%d words inputed.\n", words);
}