C++算法竞赛篇(九)字符数组题型讲解
C++算法竞赛篇(九)字符数组题型讲解
- 前言
- C++ 字符数组题型讲解
- 第一题 自动修正
- 第二题 整理药名
- 第三题 输出亲朋字符串
前言
- 前面的题型里我们讲解了数组相关的题型
- 本篇博客我们开始讲解字符数组题型
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++算法竞赛篇文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13001405.html?spm=1001.2014.3001.5482
C++ 字符数组题型讲解
第一题 自动修正
题目链接 https://www.luogu.com.cn/problem/P5733
解题思路:
- 输入处理:通过
cin
读取字符数组arr
,存储待转换的字符串。 - 转换逻辑:
- 用
strlen(arr)
获取字符串长度,通过for
循环遍历每个字符。 - 判断字符是否为小写字母(
arr[i] >= 'a' && arr[i] <= 'z'
),若是则通过arr[i] -= 32
转换为大写(利用 ASCII 码差值:小写转大写需减 32)。
- 用
- 输出结果:遍历修改完成后,直接输出字符数组
arr
,得到全大写的字符串。
#include <iostream>
#include <cstring>using namespace std;const int N = 110;
char arr[N];int main()
{//输入cin >> arr; //转换int len = strlen(arr);int i = 0;for (i = 0; i < len; i++){if (arr[i] >= 'a' && arr[i] <= 'z')arr[i] -= 32;}//输出cout << arr << endl;return 0;
}
第二题 整理药名
题目链接 https://ybt.ssoier.cn/problem_show.php?pid=1139
解题思路:
- 输入处理:先读取药名数量
n
,通过while(n--)
循环处理每个药名,每次用cin
读取字符数组arr
。 - 处理逻辑:
- 首字符:用
islower(arr[0])
判断是否为小写,若是则通过toupper(arr[0])
转大写。 - 其余字符:从索引
j=1
开始遍历,用isupper(arr[j])
判断是否为大写,若是则通过tolower(arr[j])
转小写,直到遇到字符串结束符'\0'
。
- 首字符:用
- 输出结果:每个药名处理完成后,立即输出
arr
,循环处理完所有n
个药名。
#include <iostream>
#include <cctype>
using namespace std;const int N = 25;
char arr[N];
int main()
{int n;cin >> n;while(n--){//输入药名cin >> arr;//处理药名if(islower(arr[0]))arr[0] = toupper(arr[0]);int j = 1;while(arr[j] != '\0'){if(isupper(arr[j]))arr[j] = tolower(arr[j]);j++;}cout << arr << endl;}return 0;
}
第三题 输出亲朋字符串
题目链接 https://www.luogu.com.cn/problem/B2113
解题思路:
- 输入处理:通过
cin
读取字符数组s
,存储原始字符串。 - 遍历与计算逻辑:
- 用
strlen(s)
获取字符串长度len
,通过while
循环遍历每个字符(索引i
)。 - 对于当前字符
s[i]
,下一个字符为s[(i + 1) % len]
(利用取模%
实现“循环衔接”:最后一个字符的下一个字符是第一个字符)。 - 将当前字符与下一个字符相加(
s[i] + s[(i + 1) % len]
),直接输出结果字符。
- 用
- 输出格式:遍历过程中逐个输出计算得到的字符,最终拼接成“亲朋字符串”。
#include <iostream>
#include <cstring>
using namespace std;const int N = 110;
char s[N];int main()
{cin >> s; int len = strlen(s);int i = 0;while (s[i]) {char tmp = s[i] + s[(i + 1) % len]; cout << tmp;i++;}return 0;
}
以上就是这篇博客的全部内容,下一篇我们将继续探索C++算法的更多精彩内容。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++算法竞赛篇文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13001405.html?spm=1001.2014.3001.5482
非常感谢您的阅读,喜欢的话记得三连哦 |