meili 发表于 2022-10-27 15:43:27

【输入一行字符,统计其中的单词的个数,单词之间以单个空格作为分隔符main(){charstr[81];inti,num=0,word=0;charc;gets(str);for(i=0;(c=str[i])!=#39;#39;;i++)if(c==#39;#39;)word=0;elseif(word==0){word=1;num++;}printf(quot;Thereare%dwor】

<p>问题:【输入一行字符,统计其中的单词的个数,单词之间以单个空格作为分隔符main(){charstr;inti,num=0,word=0;charc;gets(str);for(i=0;(c=str)!=#39;#39;;i++)if(c==#39;#39;)word=0;elseif(word==0){word=1;num++;}printf(quot;Thereare%dwor】
<p>答案:↓↓↓<p class="nav-title mt10" style="border-top:1px solid #ccc;padding-top: 10px;">黄谨的回答:<div class="content-b">网友采纳  if(c=='')word=0;//当前字符是空格,所以不是单词,word=0  elseif(word==0)//当前字符是字母(c!=''),所以不是空格,并且前面的不是单词(word==0)  {  word=1;//不是空格,并且前面的不是单词,所以是个新单词。word=1;  num++;//遇到单词的第一个字母,单词数加一。  //word一直是1只有重新遇到空格,word才为0,  }  //因为这种情况什么也不做,所以代码没有写,因此就有些不好理解了。  //else否则,(当前字符是字母(c!=''),并且word==1;即还在同一个单词中)  //donothing();什么也不做!  //  //  PS:  这个程序,可以处理N个空格,和前后都有空格的情况。  的确是个小巧精悍的程序!  举例str[]=“Itisagoodidea!";  i=0~3c=='';执行if(c=='')word=0;所以一直有word=0;并且word==0;  i=4遇到‘I’c=='I';word==0执行elseif(word==0);//word=1;num++;  word由0变1;一个单词了,计数加一。  并且以后就在同一个单词中了,始终有word==1,除非遇到空格。  i=5遇到‘t’;c=='t';word==1不执行if和elseif的任何一个;滑过‘t’  i=6再次遇到空格,执行if(c=='')word=0;遇到第一个空格,word==1变成word==0  i=7~9以后重复i=0~4一直有word=0的赋值;并且始终有word==0;  i=10重复i=4的过程这次遇到‘i’c=='i';word==0执行elseif(word==0);//word=1;num++;  word由0变1;一个单词了,计数加一。  i=11重复i=5遇到‘s’;c=='s';word==1不执行if和elseif的任何一个;滑过‘s’  以后大致相同最后遇到'扫描结束。  记录5个单词  从空格变单词5次;从单词变空格5次;  有几个空格word=0;就执行几次。  有几个单词word=1;num++;就执行几次,并且,只有遇到,第一个字母时,才执行。  所有,非第一个字母的字母,和其他,非空格,并且非结束符的字符,被滑过。  word和num都初始化为0所以无论,第一个是空格会被赋值为0,还是字母(word已经是0了)都没有问题。  同样,结尾有无空格,和空格有N个,一样没有问题。因为:  1)结尾的空格,不会遇到非空格,就结束循环了。  2)无论多少空格,都会有word=0的赋值操作,不遇到非空格,word就一直为0;  结论:这段代码看了,确实给人以一种,惊艳的感觉!!!!!!!!!!!!<p class="nav-title mt10" style="border-top:1px solid #ccc;padding-top: 10px;">何国辉的回答:<div class="content-b">网友采纳  抱歉回复晚了我基本除了一个位置不是很理解其他的都看懂了这个里面的循环语句是不是当if不为真的时候,则elseif就必定为真这样认为我才能想通因为我总是陷入word==0的考虑中了当if==“”的时候表示为空格当if不表示空格,表达式1不成立。则必定为条件表达式2,此时执行elseif(word==0),必定不为“”了,所以word=1;num++;是我这样理解的么?<p class="nav-title mt10" style="border-top:1px solid #ccc;padding-top: 10px;">黄谨的回答:<div class="content-b">网友采纳  对呀,if和else条件是互斥的,ifelseifelse是三种互斥的条件,没有写else是因为那种条件下,什么也不用干!
页: [1]
查看完整版本: 【输入一行字符,统计其中的单词的个数,单词之间以单个空格作为分隔符main(){charstr[81];inti,num=0,word=0;charc;gets(str);for(i=0;(c=str[i])!=#39;#39;;i++)if(c==#39;#39;)word=0;elseif(word==0){word=1;num++;}printf(quot;Thereare%dwor】