题目:求每个单词的长度
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。
注意,如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。
没有被空格间隔开的符号串,都算作单词。注意:空格不计入单词长度。
输入
一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。
输出
依次输出对应单词的长度,之间以逗号间隔。
样例输入
She was born in 1990-01-02 and from Beijing city.
样例输出
3,3,4,2,10,3,4,7,5
1、解决办法1用find和substr
提示:
1.find找第一个空格,找到的索引加1就是第一个单词的长度。
2.substr,从第一个空格到末尾开始剪切下来
3.重复12步骤,直到无空格
#include <iostream>
#include <string>
using namespace std;
int main() {string text;getline(cin,text);int start = 0;int end;// 在 find() 函数的返回值中,如果没有找到匹配的子字符串或字符,就会返回 std::string::npos。while ((end = text.find(' ', start)) != string::npos) {string word = text.substr(start, end - start);cout << "单词: " << word << ",长度: " << word.length() << endl;start = end + 1;}// 处理最后一个单词if (start < text.length()) {string word = text.substr(start);cout << "单词: " << word << ",长度: " << word.length() << endl;}return 0;
}
//输出结果
单词: She,长度: 3
单词: was,长度: 3
单词: born,长度: 4
单词: in,长度: 2
单词: 1990-01-02,长度: 10
单词: ,长度: 0
单词: ,长度: 0
单词: and,长度: 3
单词: ,长度: 0
单词: ,长度: 0
单词: from,长度: 4
单词: Beijing,长度: 7
单词: city.,长度: 5
2、解决办法2
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
string s;
int main()
{getline(cin,s);int sum=0,f=1,i; // sum:计算每个字符串长度 for(i=0;i<s.size();i++){if(s[i]!=' ') sum++; //计数每个字符串 else if(s[i]==' '&&sum!=0) // 123空格 f==1的形式就输出结果sum {if(f==1) {cout<<sum;f=0;}else if(f==0) cout<<","<<sum; // f==0重置 ,输出"," ,准备下一个字符串的计算 sum=0; // 重置 }}cout<<","<<sum; // 因为最后一个字符串后面没有空格了,只能另写一行输出最后一个sum return 0;
}
输出结果:3,3,4,2,10,3,4,7,5
3、解决办法3(利用cin特点)
分析:cin只能读入不带空格的字符串的特点(利用cin特点),用cin读入每个单词,
每读入一个字符串,就输出该单词的长度,清空数组,再读入一个字符串,输出该单词的长度,清空数组...循环。
#include<bits/stdc++.h>
using namespace std;
char s[10005];
int main()
{int f = 0;memset(s, 0, sizeof(s));while(cin >> s){f == 0 ? cout << strlen(s) : cout << "," << strlen(s); // 除第一个输入字符串,之后都输入",字符串" memset(s, 0, sizeof(s));f++;}cout << endl;return 0;
}
输出结果:3,3,4,2,10,3,4,7,5