你的程序要读入一行文本,其中以空格分隔为若干个单词,以.
结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's
算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.
不计算在内。
输入格式:
输入在一行中给出一行文本,以.
结束
提示:用scanf("%c",...);
来读入一个字符,直到读到.
为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
分析:大部分都在注释里了。参考了网上的方法,最简洁的是一位大神用stringstream ss(str);ss>>buf;buf.length();
但是个人觉得那个方法太牛啤了,还是用个土办法叭...
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
//#include<bits/stdc++.h>
int main(){
int count_c=0,i=0,flag=0;
string s;
getline(cin,s); //getline(cin,xx)可以忽略空格读入串
int n=s.length();
s[n-1]=' '; //感觉替换成空格,心里舒服很多,不然老是纠结'.'作为结尾符的情况
while(n){ //想了很多方法,也参考了网上,还是用n,也就是总串的字符总数来控制循环比较好
if(s[i]==' '){ //把问题想简单点,就是两种情况:是空格或者不是空格
n--;
if(count_c && flag==0){ //如果读入的是空格,那就检查一下还有没有要输出的串字符数(因为如果输出,count_c会立刻为0),也就是检查一下这个空格是不是在一个子串的最后一个字符后
cout<<count_c; //检查flag是专门为了第一项子串字符数的格式所设置的,后面flag++就是为了告诉程序,第一项已经输出了,不要再来看这个小if了
flag++;
}else if(count_c){ //如果不是第一项输出,要在前面先输出空格哦
cout<<' '<<count_c;
flag++;
}
count_c=0; //空格读入后的‘输出检查’完毕了,记得把count_c归零
}else if(s[i]!=' '){ //如果读入的字符不是空格,那么很简单,对count_c累加
count_c++;
n--;
}
i++; //千万别忘了这个i++鸭
}
if(count_c){ //这种情况是专门为了把子串字符数‘吐干净’设置的,因为很可能最后一个子串字符数一直‘含着’就遇到了n归零的情况,所以要再问一次自己count_c是否为0?
cout<<' '<<count_c;
}
return 0;
}