C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开
#include<Studio.h>main(){charstring〔81〕;inti,num=0,word=0;charc;getS(String);for(i=0;...
#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为什么是表示输入得是前一个字符为空格 关键就在这里啊 一定要详细点 谢谢 谢谢 谢谢 谢谢 一楼的我看不很明白 不够详细 关键点要说清楚啊 麻烦各位了啊 展开
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为什么是表示输入得是前一个字符为空格 关键就在这里啊 一定要详细点 谢谢 谢谢 谢谢 谢谢 一楼的我看不很明白 不够详细 关键点要说清楚啊 麻烦各位了啊 展开
8个回答
展开全部
#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;
}
展开全部
这为朋友,很少在电脑上调程序吧,这段程序中有一些值得注意的错误。首先,标准输入输出头文件是#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
下面是我改好的程序:
#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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你弄的太乱,我整理了一下:
#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了
好了,就说这么多,不懂再问我
#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了
好了,就说这么多,不懂再问我
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先要知道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不会加一。
体会一下吧,希望对你有所帮助。
理解上面的关系你就很容易理解这里面变量word的含义了。其实word这个变量仅仅是一个单词输入完的一个标志。当输入一个单词,输入空格时,程序中word等于0,接着执行else,直接转入执行第二个if,此时判断word是不是等于0,如果等于零说明C中的值是空格,及一个单词已经输入完,此时就对word置一,为下次判断做准备,然后对num加一。如果再输入一个新的单词,当没有输完时,及C中的值不是空格,此时第一个if不执行,执行else,接着又执行第二个if。但此时word的值是1,因此第二个if也不执行,即num不会加一。
体会一下吧,希望对你有所帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询