3593 蓝桥杯 查找最大元素 简单
cpp
// C风格解法1,通过率100%,多组数据处理样式
//str = "abcdefgfedcba"
//abcdefg(max)fedcba
//str = "xxxxx"
//x(max)x(max)x(max)x(max)x(max)
#include<bits/stdc++.h>
const int N = 1e2 + 10;
char str[N];
void solve(){
scanf("%s", str); // 读入字符串 str
int n = (int) strlen(str);
// strlen(str) 求从 str 这个地址出发到下一个 '\0' 的位置所经过的长度,
// 实际上可以理解为字符串长度,O(|str|)
char mx = 0; // 去求最大字母
for(int i = 0; i < n; i++){
mx = std::max(mx, str[i]); // 循环求最大字母
}
for(int i = 0; i < n; i++){
printf("%c", str[i]);
if(str[i] == mx){ // 每当遇到最大字母时,立刻输出(max)
printf("%s","(max)");
}
}
printf("\n");
}
int main(){
int T; scanf("%d", &T); // 输入测试组数
while(T--){ // while(T > 0){T--;...}
solve();
}
return 0;
}
C语言 strlen 函数用来求字符串的长度(包含多少个字符)。
strlen() 函数从字符串的开头位置依次向后计数,直到遇见 '\0
',然后返回计时器的值。最终统计的字符串长度不包括 '\0
'。
头文件:string.h
char str[] = "http://c.biancheng.net";
运行结果为:
sizeof = 23
strlen = 22
sizeof 统计出的字符串长度比 strlen() 函数的统计值大 1。因为 sizeof 统计了字符串结尾的 '\0
',而 strlen() 函数没有。
但是,sizeof 和 strlen() 函数的功能并不相同,strlen() 函数才是专门用来统计字符串长度,而 sizeof 不是。
cpp
// C++风格解法2,通过率100%,多组数据处理样式
//str = "abcdefgfedcba"
//abcdefg(max)fedcba
//str = "xxxxx"
//x(max)x(max)x(max)x(max)x(max)
#include<bits/stdc++.h>
void solve(){
std::string s; std::cin >> s; // 不建议使用getline,建议使用cin
//getline 一般会把第一行剩余的换行符等信息读入,导致少读一次
int n = (int) s.size(); // O(1)
char mx = 0; // 求最大字母
for(int i = 0; i < n; i++){
mx = std::max(mx, s[i]); // 循环求最大字母
}
for(int i = 0; i < n; i++){
std::cout << s[i];
if(s[i] == mx){ // 每当遇到最大字母,输出(max)
std::cout << "(max)";
}
}
std::cout << "\n";
}
int main(){
std::ios::sync_with_stdio(false);std::cin.tie(nullptr);
std::cout.tie(nullptr);
int T; std::cin >> T; // 输入测试组数
while(T--){ // while(T > 0){T--;...}
solve();
}
return 0;
}
// 使用getline
/*
2
ab
c
2'\n'ab'\n'c'\n'
*/
// std::cin >> T,此时T = 2,输入为'\n'ab'\n'c'\n'
// 第一个 getline(std::cin, s) ,s = "",剩余输入为 ab'\n'c'\n'
// 第二个 getline(std::cin, s) ,s ="ab",剩余输入为 c'\n'
reference: