问题标题: 酷町堂:1101 Word识别词长

0
0

1
已采纳
方亦欧
方亦欧
新手光能
新手光能

你这一题的错误:

首先,这一题用while会好一点。do-while写起来会麻烦。

其次,你不应该用判断s1.size()是否为0来结束,空串是没有长度的。这一题,直接这样写就可以了:

while(cin>>s1)

如果没有读入,它就会自动退出,不会继续执行。并且,这种方法直接用while实现会使代码变得更简短一点,并且更易理解。

while循环:

while(cin>>s1)
        cout<<s1.size()<<' ';

如果用do-while,也可以,但是麻烦一点:

cin>>s1;
do{
  cout<<s1.size()<<" ";
}while(cin>>s1);

由于cin>>s1这一条语句不仅是在判断,它也同时执行了读入,所以,根据do-while的特性,是不能在循环体里面读入的,如果这样的话,你的while判断就会没有办法判断输入的是否为空串。

望采纳!

方亦欧在2018-02-20 14:48:49追加了内容

再补充一下,如果你在do-while循环里面读入,在后面的while判断里如果再写一遍while(cin>>s1)的话,就相当于读入了两遍,自然会导致错误。

0
夏子健
夏子健
初级光能
初级光能

  for(i=0;i<l;i++)
    {
        num=0;
        while(a[i]!=' '&&i<l)//用字符串可以成功,i<l表示i不能越界,a[i]!=' '表示当前字符不能为空格
        {
            num++;//num为计数变量,记录当前单词长度
            i++;//往下一位进行查找
        }
        cout<<num<<" ";//输出结果
    }
//望采纳,谢谢!祝你ac

0
栾峻岩
栾峻岩
初级天翼
初级天翼
for (int i=0;i<s.size();i++)
    {
        if (s[i]!=' ') a[t]+=s[i];
        else t++;
    }

 

0
我要回答