你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。 输入格式: 输入在一行中给出一行文本,以.结束 提示:用scanf("%c",...);来读入一个字符,直到读到.为止。 输出格式: 在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。 输入样例:
时间: 2023-05-31 12:18:33 浏览: 198
### 回答1:
这个问题要求编写一个读取一行文本的程序,在其中用空格分隔为若干个单词,每个单词的长度为若干个字符,以.结束。你需要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。
输入格式: 输入在一行中给出一行文本,以.结束。
输出格式: 在一行中按照输入的格式输出单词的长度,每个长度后面跟一个空格。行末不得有多余空格。
输入样例: This is a sample program that reads input.
输出样例:
4 2 1 6 7 5.
注意:实现输入时,请使用scanf("%c",...);来读入一个字符,直到读到。为止。
### 回答2:
本题考察的是字符串的扫描和处理技巧,在读入每一个字符时需要判断其是否为空格或者.,如果是则输出前一个单词的长度并将计数器清零,否则计数器加1。
具体实现时,可以用scanf("%c", &c)读入一个字符,同时用getchar()读掉多余的空格,直到遇到.为止。读入的字符依次存入一个字符数组中,然后扫描这个数组并统计长度即可。
具体代码如下:
```cpp
#include <stdio.h>
int main()
{
char c, s[1000];
int len = 0; // 单词长度计数器
// 读入文本,直到读到.
scanf("%c", &c);
while (c != '.') {
s[len++] = c;
scanf("%c", &c);
}
// 扫描字符串并输出每个单词的长度
for (int i = 0; i < len; i++) {
if (s[i] == ' ') {
printf("%d ", len - i - 1);
} else if (i == len - 1) {
printf("%d\n", len - i - 1);
}
}
return 0;
}
```
需要注意的细节有:
1. 在每次读入一个字符后,需要用getchar()读掉多余的空格,直到读到第一个非空格的字符。这是为了避免连续空格造成的额外计数。
2. 在输出最后一个单词长度时,需要用printf("%d\n", len - i - 1)输出换行符。
### 回答3:
本题需要读入一行文本,其中以空格分隔为若干个单词,以.结束。因此我们可以使用 scanf 来读入每个字符,并判断是否为 '.',如果是则结束读入。
读入的过程中,需要过滤连续的空格。如果遇到空格,则说明一个单词已经结束,可以输出它的长度并重新计数。如果遇到非空格字符,则将计数器加一。
最后需要注意的是,行末的 '.' 不计算在内,因此输出长度时要去掉它。可以使用一个布尔变量标记在读入到 '.' 后是否遇到过一个非空格字符,如果遇到了,则说明最后一个单词已经结束,可以直接输出它的长度。
完整代码如下:
```C++
#include <iostream>
using namespace std;
int main() {
int cnt = 0; // 当前单词长度计数器
bool last_non_blank = false; // 上一个字符是否为非空格字符的标记
char c; // 读入的字符
while (scanf("%c", &c) != EOF) { // 循环读入字符,直到遇到 EOF
if (c == '.') { // 如果读入到 '.',则结束读入
break;
} else if (c == ' ') { // 如果读入到空格
if (last_non_blank) { // 如果上一个字符是非空格字符,说明一个单词已经结束
cout << cnt << " "; // 输出单词长度
cnt = 0; // 重置计数器
last_non_blank = false; // 标记为已经遇到空格
}
} else { // 如果读入到非空格字符
cnt++; // 计数器加一
last_non_blank = true; // 标记为已经遇到非空格字符
}
}
if (last_non_blank) { // 最后一个单词还未输出(即遇到了最后一个非空格字符)
cout << cnt; // 直接输出最后一个单词的长度
}
return 0;
}
```
阅读全文