7-26 单词长度(15 分)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.
结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's
算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.
不计算在内。
输入格式:
输入在一行中给出一行文本,以.
结束
提示:用scanf("%c",...);
来读入一个字符,直到读到.
为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
思路:循环进行每碰到一个不是空格或者点号的递归返回该单词长度,递归完之后从递归起点加上单词长度继续进行循环,细节处理详见代码。
1 #include<stdio.h> 2 #include<string> 3 #include<sstream> 4 #include<iostream> 5 using namespace std; 6 int f(string s, int p) //递归进行长度的计算 7 { 8 if (s[p + 1] == ' ' || s[p + 1] == '.')return 1; 9 else return 1 + f(s, p + 1); 10 } 11 int main() 12 { 13 string line; 14 getline(cin, line); //整行输入字符串 15 16 int flag = 0; //用来判断是否在输出第一个单词,解决行末没有最后的空格。 17 for (int i = 0; i < line.length(); i++) 18 { 19 if (line[i] != ' '&&line[i] != '.') //点号和空格不进行递归,解决行中可能出现连续的空格 20 { 21 int len = f(line, i); 22 if (flag == 0){ 23 cout << len; 24 flag = 1; 25 } 26 else cout << " " << len; 27 i += len; 28 } 29 } 30 cout << endl; 31 return 0; 32 }