GESPC++三级考试语法知识(《字符数组进阶竞赛题》)
🌟《字符数组进阶竞赛题》
🥇 第1题:统计字母个数(基础必会)
1、🎯 故事
小机器人收到一串密码:
a1b2c3!它只关心字母有多少个 🤖
2、🧠 思路
👉 遍历字符数组
👉 判断:
'a'~'z' 或 'A'~'Z'3、💻 代码
#include<iostream> using namespace std; int main() { char s[100]; cin >> s; int cnt = 0; for(int i = 0; s[i] != '\0'; i++) { if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) { cnt++; } } cout << cnt; }4.⏱ 复杂度
👉 时间:O(n)
👉 空间:O(1)
🥈 第2题:全部转大写
1、🎯 故事
密码太乱,小机器人要统一成大写!
2、🧠 思路
👉 小写 → 大写:
s[i] = s[i] - 32;3、💻 代码
#include<iostream> using namespace std; int main() { char s[100]; cin >> s; for(int i = 0; s[i] != '\0'; i++) { if(s[i] >= 'a' && s[i] <= 'z') { s[i] -= 32; } } cout << s; }4、⏱ 复杂度
O(n)
🥉 第3题:反转字符串(经典🔥)
1、🎯 输入
hello输出:
olleh2、🧠 思路
👉 双指针交换
3、💻 代码
#include<iostream> #include<cstring> using namespace std; int main() { char s[100]; cin >> s; int len = strlen(s); for(int i = 0; i < len/2; i++) { char t = s[i]; s[i] = s[len-1-i]; s[len-1-i] = t; } cout << s; }4、⏱ 复杂度
O(n)
🏅 第4题:判断回文串(经常考🔥)
1、🎯 输入
abba输出:
YES2、🧠 思路
👉 左右对比
3、💻 代码
#include<iostream> #include<cstring> using namespace std; int main() { char s[100]; cin >> s; int len = strlen(s); bool ok = true; for(int i = 0; i < len/2; i++) { if(s[i] != s[len-1-i]) { ok = false; break; } } if(ok) cout << "YES"; else cout << "NO"; }4、⏱ 复杂度
O(n)
🏅 第5题:字符串比较(字典序)
1、🎯 输入
apple banana输出:
apple < banana2、🧠 思路
👉 用 strcmp
3、💻 代码
#include<iostream> #include<cstring> using namespace std; int main() { char a[100], b[100]; cin >> a >> b; int t = strcmp(a, b); if(t < 0) cout << a << " < " << b; else if(t == 0) cout << "="; else cout << a << " > " << b; }4、⏱ 复杂度
O(n)
🏅 第6题:删除数字字符(经典技巧🔥)
1、🎯 输入
a1b2c3输出:
abc2、🧠 思路
👉 新建数组
👉 只保留非数字
3、💻 代码
#include<iostream> using namespace std; int main() { char s[100], t[100]; cin >> s; int j = 0; for(int i = 0; s[i] != '\0'; i++) { if(!(s[i] >= '0' && s[i] <= '9')) { t[j++] = s[i]; } } t[j] = '\0'; cout << t; }4、⏱ 复杂度
O(n)
🏅 第7题:统计每个字符出现次数(进阶🔥)
1、🎯 输入
aabbbcc输出:
a:2 b:3 c:22、🧠 思路
👉 用数组当“桶”
int cnt[256];3、💻 代码
#include<iostream> using namespace std; int main() { char s[100]; cin >> s; int cnt[256] = {0}; for(int i = 0; s[i] != '\0'; i++) { cnt[s[i]]++; } for(int i = 0; i < 256; i++) { if(cnt[i] > 0) { cout << (char)i << ":" << cnt[i] << endl; } } }4、⏱ 复杂度
O(n + 256)
🏅 第8题:最长连续相同字符(考试常考🔥)
1、🎯 输入
aaabbccccd输出:
42、🧠 思路
👉 记录当前连续长度
👉 更新最大值
3、💻 代码
#include<iostream> using namespace std; int main() { char s[100]; cin >> s; int maxlen = 1, cur = 1; for(int i = 1; s[i] != '\0'; i++) { if(s[i] == s[i-1]) { cur++; } else { if(cur > maxlen) maxlen = cur; cur = 1; } } if(cur > maxlen) maxlen = cur; cout << maxlen; }4、⏱ 复杂度
O(n)
🎯 最终总结
通过学习,我们现在已经掌握:
✅ 字符遍历
✅ ASCII 判断
✅ 字符串修改
✅ 双指针(反转、回文)
✅ 计数思想(桶)
✅ 字符串处理技巧(删除、拼接)
