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 }