单词长度 (15 分)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.
结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's
算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.
不计算在内。
输入格式:
输入在一行中给出一行文本,以.
结束
提示:用scanf("%c",...);
来读入一个字符,直到读到.
为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
这是原先写的答案,用多次输入,一个一个的看字符是单词还是空格,单词cnt++,空格输出;
但是这有一个测试点始终通不过。。。于是换了另一种写法,于是就通过了。
一种是一边输入一遍计数判断,一种是全部接受然后一一计数判断,但是结果却不同。
如果有哪位能看出我这第一种方法问题出在那里,请评论区留言,感激不尽。
/*单词长度*/
#include <bits/stdc++.h>
using namespace std;
int main (void){
char ch;
int cnt = 0;
while(scanf("%c", &ch) != EOF){
if(ch != ' '){
cnt++;
}else{
if(cnt != 0){
printf("%d ", cnt);
cnt = 0;
}else{
continue;
}
}
if(ch == '.'){
cnt=cnt-1;
if(cnt!=0)
printf("%d", cnt );
break;
}
}
return 0;
}
/*单词长度*/
#include <bits/stdc++.h>
using namespace std;
int main (void){
string s;
int cnt = 0;
int sp = 0;
getline(cin, s);
int length = s.length();
for(int i = 0; i < length - 1; i++){
if(s[i] != ' '){
if(cnt && sp){
cout << cnt << " ";
cnt = 0;
}
cnt++;
sp = 0;
}else{
sp++;
}
}
if(cnt){
cout << cnt << endl;
}
return 0;
}