题目测试点比较坑,其中空句子需要不输出任何结果方可通过,输出的结尾不能有空格,最开始想用‘\b’删除最后一个空格,结果显示答案错误。改考虑在输出长度前输出空格来处理。代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string ss;
getline(cin, ss); //读入一整个句子
if (ss[0] == '.') {
return 0; //空句子情况
}
int i = 0;
int count = 0;
bool newWord = false; //是否是一个新单词
bool first = true; //是否是第一个单词
while (ss[i] != '\0') {
if (i == 0) {
if (ss[i] != ' ') {
newWord = true; //第一个字符非空格
}
}
else if (i > 0 && ss[i - 1] == ' ' && ss[i] != ' ') {
newWord = true;
count = 0;
}
count++;
if (ss[i] == ' ' && newWord == true) {
if (first) { //第一个输出前面无空格
cout << count - 1;
first = false;
}
else cout << " " << count - 1;
count = 0;
newWord = false;
}
else if (ss[i] == '.' && ss[i - 1] != ' ') {
if (first) {
cout << count - 1;
first = false;
}
else cout <<" "<<count - 1;
break;
}
i++;
}
}