1 条题解
-
1
C
说明
本题需统计不区分大小写时与"WOHEYEZHI"相同的字符串数量。核心思路:先过滤长度不是10的字符串(目标长度固定为10),再将剩余字符串的每个字符转为大写后与目标字符串比较,统计匹配数量。时间复杂度O(n),适合处理10^5级别的输入。
代码
#include <stdio.h> #include <string.h> int main() { int n, count = 0; scanf("%d", &n); const char target[] = "WOHEYEZHI"; for (int i = 0; i < n; i++) { char s[21]; scanf("%s", s); // 先判断长度是否相同,不同则直接排除 if (strlen(s) != 9) continue; // 转为大写字母 for (int j = 0; j < 9; j++) { if (s[j]>='a') s[j]-='a'-'A'; } if (!strcmp(s, target)) count++; } printf("%d\n", count); return 0; }C语言拓展知识
推荐搜索:toupper函数对非字母字符的处理。
问:如果想转换字母突然忘了ASCII关系怎么办?但是又不会其他法。
答:小写-'a'+'A' 变成 大写 大写-'A'+'a' 变成 小写
C++
说明
本题逻辑与C语言一致,C++可通过string类的特性进一步简化:直接在比较时转换字符大小写,无需额外创建转换后的字符串,代码更紧凑。
万能头文件
#include<bits/stdc++.h> 是C++非标准头文件(竞赛常用),包含所有标准库,无需手动逐个包含,适合快速编码。
新知识
-
字符串长度判断:
- 术语:
string::size() - 解释:string类的成员函数,直接返回字符串长度(不包含结束符),比C语言手动计算更便捷。
- 对比:C语言需循环或strlen计算长度;C++的string可直接获取。
- 术语:
-
字符即时转换:
- 术语:
toupper()在比较中直接使用 - 解释:无需提前转换整个字符串,可在比较时对单个字符即时转换,减少内存使用和操作步骤。
- 对比:C语言需显式循环转换;C++可在条件判断中直接转换,代码更简洁。
- 术语:
AC
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, cnt = 0; cin >> n; const string target = "WOHEYEZHI"; while(n--){ string s; cin>>s; for(char &i:s) i=toupper(i); if(s==target) cnt++; //本身其实校验长度了 `s.size()`是s的长度 } cout << cnt << endl; return 0; }C++拓展知识
推荐搜索:C++ string与C风格字符串的转换方法、toupper在不同编译器中的实现差异。
-
- 1
信息
- ID
- 488
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 52
- 已通过
- 18
- 上传者