7-26 单词长度

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 }

原文地址:https://www.cnblogs.com/zengguoqiang/p/8328697.html