一个班级中有 n 个学生,每个学生有一个名字。班主任希望知道学生中名字最长(名字中的一个空格长度计为 1)的学生是谁。
输入格式
你的程序接受的输入的第一行是一个整数 n,表示学生的总数。之后的 n行,每行会接受一个学生的名字(可能有空格)。学生的名字不超过 100 个字符。
输出格式
输出 n 位学生中最长的学生名字(如果有多个名字一样长的学生,输出第一个)。
第一种方法
每次比较都将最长字符串更新到max数组中,输出max
#include <stdio.h>
#include <string.h>
int main() {
int n;
char m;
int i,j = 0;
scanf("%d\n", &n);
char max[100] = " ";
for ( i = 0; i < n; i++) {
char name[100] = " ";
while (scanf("%c", &m) != EOF) {
if (m!='\n'){
name[j++] = m ;
}
else{
j = 0;
if (strlen(name) > strlen(max))
strcpy(max,name);
break;
}
}
}
printf("%s\n",max);
return 0;
}
第二种方法
记录每次比较时较长字符串的下标index,从而输出最长的名字
#include <stdio.h>
#include <string.h>
int main() {
int n;
char name[20][100];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", &name[i]);
}
int index = 0;
for (int i = 1; i < n; i++){
if (strlen(name[index]) < strlen(name[i])) {
index = i;
}
}
printf("%s\n",name[index]);
return 0;
}
方法三:c++字符串
#include <iostream>
#include <string>
using namespace std;
int main() {
string ans, temp;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> temp;
if (ans.size() < temp.size()) {
ans = temp;
}
}
cout << ans << endl;
return 0;
}