题目描述
输入多个字符串,输出最长字符串。要求定义并使用函数maxLenStr(), void maxLenStr(char ×str[], int n, int ×max) { 从字符串数组str中找出最长的一个字符串,并将其下标存入形参指针max所指内存。 }
输入描述
输入有多行,每行一个字符串,每个字符串长度不超过80,输入最多不超过100行,用***×作为结束输入的标志,该行输入不用处理。
输出描述
输出最长的一个字符串。
输入样例
L love C programming
ACM/ICPC
study hard
****
输出样例
L love C programming
#include <stdio.h>
#include <string.h>
void maxLenStr(char *str[], int n, int *max) {
*max = 0; // 初始最大长度为0
for (int i = 1; i < n; i++) {
if (strlen(str[i]) > strlen(str[*max])) {
*max = i; // 更新最大长度的字符串下标
}
}
}
int main() {
const int MAX_LINES = 100;
const int MAX_LENGTH = 80;
char *str[MAX_LINES];
char input[MAX_LENGTH + 1]; // +1 用于存储字符串结尾的 null 字符
// 输入字符串
int n = 0;
while (1) {
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = '\0'; // 移除换行符
if (strcmp(input, "***") == 0) {
break; // 遇到结束标志则停止输入
}
str[n] = strdup(input); // 使用strdup复制字符串
n++;
}
// 调用函数找出最长的字符串
int maxIndex;
maxLenStr(str, n, &maxIndex);
// 输出最长的字符串
printf("%s\n", str[maxIndex]);
// 释放动态分配的内存
for (int i = 0; i < n; i++) {
free(str[i]);
}
return 0;
}