题目描述
2020年06月2级第二题题目:最长最短单词
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。 试输出第1个最长的单词和第1个最短单词。
输入
一行句子。
输出
两行输出: 第1行,第一个最长的单词。 第2行,第一个最短的单词。
样例输入
复制
I am studying Programming language C in Peking University
样例输出
复制
Programming
I
提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
#include <bits/stdc++.h>
using namespace std;
#define MAX_W 200
#define MAX_L 100
int main() {
// 定义输入句子的最大长度
char s[MAX_W * (MAX_L + 1)];
cin.getline(s, sizeof(s));
// 定义二维数组存储单词
char w[MAX_W][MAX_L + 1];
int wc = 0;
int len = strlen(s);
int st = 0;
// 分割单词并存储到二维数组中
for (int i = 0; i <= len; ++i) {
if (s[i] == ' ' || s[i] == ',' || s[i] == '\0') {
if (st < i) {
int wl = i - st;
strncpy(w[wc], &s[st], wl);
w[wc][wl] = '\0';
wc++;
}
st = i + 1;
}
}
// 初始化最长和最短单词为第一个单词
char* lw = w[0];
char* sw = w[0];
// 查找最长和最短单词
for (int i = 1; i < wc; ++i) {
if (strlen(w[i]) > strlen(lw)) {
lw = w[i];
}
if (strlen(w[i]) < strlen(sw)) {
sw = w[i];
}
}
// 输出结果
cout << lw << endl;
cout << sw << endl;
return 0;
}
代码说明: 1. 输入处理:使用cin.getline读取整行输入。 2. 分割单词: 使用一个二维字符数组w来存储每个单词。 遍历输入字符串s,找到每个单词的起始和结束位置,并将其复制到w数组中。 3. 查找最长和最短单词: 初始化lw(最长单词)和sw(最短单词)为第一个单词。 使用for循环遍历所有单词,更新lw和sw。 4. 输出结果:分别输出第一个最长和第一个最短的单词。 这个程序严格按照题目要求,使用二维数组来存储单词,并通过for循环来处理和比较单词长度。变量名尽量简化,并添加了必要的注释。
4134

被折叠的 条评论
为什么被折叠?



