3593 蓝桥杯 查找最大元素 简单
// 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); // 读入字符串 strint 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 不是。
// 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:
C语言strlen()函数:求字符串的长度
char字符对应ASCII码表0-255(全)_char字符对应的ascii码值-CSDN博客