解题思路:
1.由题可得,整行字符串中每个单词有至少一个空格分割,输出每个单词的长度
2.首先,利用获取整行的方法得到字符串,因为首尾没有空格,这里我们首尾加上空格,预处理一下,然后开始遍历,确定单词的长度,那么就要确定单词的起始位置和终止位置,用start和end来表示,如果当前位置是空格,下一位置不是空格,那么为单词的起点,即start=i+1;并且标记起点找到了,同理,如果当前位置不是空格,下一位置是空格,那么为单词的终点,end=i;同样标记终点找到了
3.在起点和终点都找到的时候,输出长度end-start+1,思考为什么加1
4.输出的时候注意逗号,利用打标记的方法,先输出一个数,然后再输出逗号和单词长度
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
int start,end;//定义单词首尾的标记点
bool flag1=0,flag2=0,flag=1;
getline(cin,a);//获取整行字符串
a=' '+a+' ';//首尾加空格,统一处理
for(int i=0;i<=a.length()-1;i++)
{
if(a[i]==' '&&a[i+1]!=' ')//如果当前位置是空格,下一位置不是空格
{
start=i+1;//记录单词起始点
flag1=1;//标记找到了起始点
}
if(a[i]!=' '&&a[i+1]==' ')//如果当前位置不是空格,下一位置是空格
{
end=i;//记录单词终止点
flag2=1;//标记找到了终止点
}
if(flag1==1&&flag2==1)//如果起始点和终止点都找到
{
if(flag==1)//逗号的处理
{
cout<<end-start+1;
flag=0;
}
else
cout<<","<<end-start+1;
flag1=0;//起始点取消标记
flag2=0;//终止点取消标记
}
}
return 0;
}