最长最短单词 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。 试输出第1个最长的单词和第1个最短单词。 输入 一行句子。 输出 两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。 样例输入 I am studying Programming language C in Peking University 样例输出 Programming I 提示 如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
时间: 2024-02-13 12:02:57 浏览: 182
这是一道简单的字符串处理题目,可以按照以下步骤解决:
1. 读入一行句子;
2. 使用 strtok 函数将句子分割成单词;
3. 对于每个单词,记录它的长度以及它在句子中的起始位置;
4. 找到最长单词和最短单词的长度以及它们在句子中的起始位置;
5. 使用 strncpy 函数将最长单词和最短单词复制到另外两个字符串中;
6. 输出结果。
下面是一份可能的 C 语言代码实现:
```c
#include <stdio.h>
#include <string.h>
int main() {
char sentence[201]; // 存储句子
char word[101]; // 存储单词
int len; // 单词长度
int start; // 单词在句子中的起始位置
int max_len = 0; // 最长单词的长度
int min_len = 100; // 最短单词的长度,初始化为一个很大的数
int max_start; // 最长单词在句子中的起始位置
int min_start; // 最短单词在句子中的起始位置
char max_word[101]; // 最长单词
char min_word[101]; // 最短单词
// 读入句子
fgets(sentence, 201, stdin);
// 分割句子中的单词
char* p = strtok(sentence, " ,\n");
while (p != NULL) {
len = strlen(p);
start = p - sentence;
if (len > max_len) {
max_len = len;
max_start = start;
strncpy(max_word, p, len);
max_word[len] = '\0'; // strncpy 不会自动添加字符串结束符,需要手动添加
}
if (len < min_len) {
min_len = len;
min_start = start;
strncpy(min_word, p, len);
min_word[len] = '\0'; // 同上
}
p = strtok(NULL, " ,\n");
}
// 输出结果
printf("%s\n", max_word);
printf("%s\n", min_word);
return 0;
}
```
注意,这份代码中使用的是 fgets 函数来读入整行句子,因为 gets 函数在缓冲区溢出的情况下可能会导致安全问题。另外,也要注意 strncpy 函数不会自动添加字符串结束符,需要手动添加。
阅读全文