C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

#include <Studio.h>

main()

{

char string 〔 81 〕 ;

int i , num=0 , word=0;

char c; getS(String);

for (i=0;(c=String 〔 i 〕 )!=' \ 0';i++)

if(c=='') word=0;

else

if(word==0)

{ word=1; num++; }

printf("There are %d wordS in the line. \ n" , num);

}

运行情况如下:

I am a boy.

There are 4 words in the line.

就是这里的if(c=='') word=0;

else

if(word==0)

{ word=1; num++; }

看不懂啊 开头如果c==‘’就说明出现单词word=0是表示未出现单词 但是下面word==0了 是怎么回事啊 还有这个循环是怎么循环的哦 麻烦详细点 详细 详细 详细 详细 谢谢 我是菜鸟 很笨。问题补充:

还有就是word==0为什么是表示输入得是前一个字符为空格 关键就在这里啊 一定要详细点 谢谢 谢谢 谢谢 谢谢 一楼的我看不很明白 不够详细 关键点要说清楚啊 麻烦各位了啊

#include<stdio.h>

int main()

intword,num=0;

char ch;

while((ch=getchar())!='\n')

if(ch=='')

word=0;

else

if(word==0)

num++;

word=1;

printf("%d",num);

return0;

扩展资料:

分析

若当前字符=空格

YESﻩ未出现新单词,使word=0,num不累加

NOﻩ前一字符为空格(word=0),新单词出现,使num加1,word=1

前一字符为非空格(word=1),未出现新单词,num不加1*/

其它方法:

#include<stdio.h>

int main()

char string[81];

int i,num=0,word=0;

char c;

gets(string);

for(i=0;((c=string[i])!='\0');i++)

if(c=='')word=0;

elseif(word==0)

word=1;

num++;

printf("thereare%dwordsinthisline.\n",num);

return0;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-24
#include<stdio.h>
int main()
{
    char string[81];
    int i,num=0,word=0;
    char c;
    gets(string);
    for(i=0;(c=string[i])!='\0';i++)
        if(c==' ')word=0;
        else if(word==0)
{
word=1;
num++;
}
printf("There are %d words in the line.\n",num);
return 0;
}

第2个回答  2011-01-02
这为朋友,很少在电脑上调程序吧,这段程序中有一些值得注意的错误。首先,标准输入输出头文件是#include<stdio.h>,第二、数组string后是中括号,应该是string[81],第三,string和String是不同的,c语言区分大小写,最后一个问题,编程时所有符号一律用英文输入,这个虽然是小问题,但一开始就应养成良好的习惯。
下面是我改好的程序:
#include<stdio.h>
main()
{
char string[81];
int i,num=0,word=0;
char s;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else
if(word==0)
{word=1;num++;}
printf("There are %d wordS in the line.\n",num);
}
好了,言归正传。这段程序有个值得注意的问题,for循环没有大括号,意味着它包含一个if-else语句,if语句中是c=' '表示一个单词的结束,然后用word标记,word=0时表示有一个完整的单词。当读入到下一个字母时,表示又有一个新的单词,所以if(word==0)时,num++,同时将word取消标记准备下一次标记。比如说:
输入I am a boy.
I读入:因为word==0 所以num=1,word=1
读入一个空格:word=0 说明第一个单词读入完毕
a读入:因为word==0 所以num=2,word=1 说明有第二个单词
m读入:word=1 说明第二个单词未读完
读入一个空格 word=0 说明第二个单词读入完毕
a读入 因为word=0 说明有第三个单词 所以 num=3,word=1
以此类推,得到结果为4本回答被网友采纳
第3个回答  2011-01-02
你弄的太乱,我整理了一下:
#include<stdio.h>
main(){
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else if(word==0){
word=1;
num++;
}
printf("There are %d words in the line. \n" ,num);
}

你说的这句
if(c==' ') word=0;
else if(word==0){
word=1;
num++;
}
当c=空格时,令word=0;不执行else if语句
直到c!=空格时(注意连续多个空格的处理),不执行if语句,执行else if语句
由于前面令word=0,所以到空格后第一非空格字符时,word是=0的,else if判断成功,
执行word=1; num++;,第二个非空格字符时,word就=1了,就不执行word=1; num++;了
这样一个单词num就加一次
由于初始时令word=0,故第一单词的第一个字母时,num就等于1了

好了,就说这么多,不懂再问我本回答被提问者采纳
第4个回答  2011-01-02
首先要知道C中选择控制语句if--else语句的配对,C语言规定else与其前面最近的一个没有配对的if成对。这题中很显然第一个if与下面的else配对。第一个if语句意思是说:如果C中的值是‘空格’则将0值给word,下面紧跟着一个else,如果C中的值不是空格,就执行第二个if。第二个if意思是说如果word中的值是哦,就把1给word,然后对num加一。
理解上面的关系你就很容易理解这里面变量word的含义了。其实word这个变量仅仅是一个单词输入完的一个标志。当输入一个单词,输入空格时,程序中word等于0,接着执行else,直接转入执行第二个if,此时判断word是不是等于0,如果等于零说明C中的值是空格,及一个单词已经输入完,此时就对word置一,为下次判断做准备,然后对num加一。如果再输入一个新的单词,当没有输完时,及C中的值不是空格,此时第一个if不执行,执行else,接着又执行第二个if。但此时word的值是1,因此第二个if也不执行,即num不会加一。
体会一下吧,希望对你有所帮助。
相似回答