首先这种题对于输出格式的要求,因为我们不知道有多少个单词,所以对最后一个单词进行输出控制会比较麻烦,因此,我们对第一个单词的长度输出格式进行控制。
#include <iostream>
using namespace std;
int main() {
char s;
scanf("%c",&s);
int count =0;
int flag=0; // 判断是否是第一个单词,等于0,说明统计的是第一个单词
while (s!='.'){
if(!isspace(s)) count++; // 当s不是空白字符时,计数器加一
else {
// 碰到是空白字符时,如果计数器非空,那么需要输出前一个单词长度
if (count) {
if (flag) // 第一个单词以后的每一个单词都输出 ' '+长度
printf(" %d", count);
else {
printf("%d", count); // 第一个单词不输出空格
flag = 1;
}
}
count = 0; // 计数器重新变为0,为下一个单词的统计做准备
}
scanf("%c",&s);
}
// 输出连在.前的单词,同样,若该单词是第一个,直接输出字符,否则,输出 ' '+字符
if (flag && count)
printf(" %d",count);
else if(count) printf("%d",count);
}
最后,完美通过测试,该解法最大的亮点在于使用一个flag 来判断是否是第一个单词,从而对应不同的输出格式。