题目
读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式
输入在一行中给出一行文本,以.结束。提示:用scanf(“%c”,…);来读入一个字符,直到读到.为止。
输出格式
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例
It’s great to see you here.
输出样例
4 5 2 3 3 4
题解
解题思路
这题考虑的东西比较多,首先输入一串英文,可以用whlie循环也可以用getline()函数;然后先判断如果它只有一个‘.’就直接返回;否则判断如果他只有一个单词则直接输出个数;如果它有多个连续的空格或者开头结尾多空格则注意只输出字母的的个数,最后输出回车即可。
注:判断第一次输出的字母个数不要打印空格,从第二个开始才开始打印空格。
完整代码
#include<string>
#include<iostream>
using namespace std;
int main(void)
{
int n = 0, flag = 1;
cout << "请输入字符串:"; // 提交时注释此行
string str;
getline(cin, str); // 读入字符串
for (int i = 0; i < str.length(); i++)
{
if (str[i] == ' ')
{
if (n != 0)
{
if (flag) // 控制输出,第一次输出没有空格
{
flag = 0;
cout << n;
}
else // 第一次之后的输出都有空格分开
cout << " " << n;
}
n = 0;
}
else if (str[i] == '.')
{
if (str == ".") // 空句子
;
else if (str[i - 1] == ' ') // ‘.’前有空格
cout << endl;
else if (str[i - 1] != ' ' && flag==0) // ‘.’前无空格
cout << " " << n << endl;
else if(str[i - 1] != ' ' && flag == 1) // 只有一个单词
cout<< n << endl;
return 0;
}
else
n++;
}
return 0;
}