7-26 单词长度 (15 分)
你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式:
输入在一行中给出一行文本,以.结束
提示:用scanf("%c",…);来读入一个字符,直到读到.为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It’s great to see you here.
输出样例:
4 5 2 3 3 4
一刷AC代码
#include <stdio.h>
int main() {
char c;
int cnt = 0, count = 0;
do {
scanf("%c", &c);
if (cnt == 0 && c == ' ') continue;
if (cnt == 0 && c == '.') break;
if (c == ' ') {
if (count == 0) printf("%d", cnt);
else printf(" %d", cnt);
cnt = 0;
count++;
continue;
}
if (c == '.') {
if (count == 0) printf("%d", cnt);
else printf(" %d", cnt);
break;
}
cnt++;
} while (c != '.');
return 0;
}
二刷AC代码
#include <iostream>
using namespace std;
int main() {
int cnt = 0, flag = 0, Mark = 0; //flag用于单开关控制空格输出
char ch; //Mark用于判断是否在某一阶段有单词输入
while (ch = getchar()) { //不停扫入字符
if (ch == '.') { //遇结束字符的相关处理
if (flag && Mark) cout << ' ';
else if (Mark) flag = 1;
if (Mark) cout << cnt;
return 0;
}
else if (ch == ' ') { //遇空格的相关处理
if (flag && Mark) cout << ' ';
else if (Mark) flag = 1;
if (Mark) cout << cnt;
cnt = 0;
Mark = 0;
}
else { cnt++; Mark = 1; } //正常情况增加单词长度 同时标志有单词出现
}
return 0;
}