当前位置: 首页 > news >正文

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

在这里插入图片描述
解题思路

  1. 输入处理:通过 cin 读取字符数组 arr,存储待转换的字符串。
  2. 转换逻辑
    • strlen(arr) 获取字符串长度,通过 for 循环遍历每个字符。
    • 判断字符是否为小写字母(arr[i] >= 'a' && arr[i] <= 'z'),若是则通过 arr[i] -= 32 转换为大写(利用 ASCII 码差值:小写转大写需减 32)。
  3. 输出结果:遍历修改完成后,直接输出字符数组 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

在这里插入图片描述
解题思路

  1. 输入处理:先读取药名数量 n,通过 while(n--) 循环处理每个药名,每次用 cin 读取字符数组 arr
  2. 处理逻辑
    • 首字符:用 islower(arr[0]) 判断是否为小写,若是则通过 toupper(arr[0]) 转大写。
    • 其余字符:从索引 j=1 开始遍历,用 isupper(arr[j]) 判断是否为大写,若是则通过 tolower(arr[j]) 转小写,直到遇到字符串结束符 '\0'
  3. 输出结果:每个药名处理完成后,立即输出 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

在这里插入图片描述

解题思路

  1. 输入处理:通过 cin 读取字符数组 s,存储原始字符串。
  2. 遍历与计算逻辑
    • strlen(s) 获取字符串长度 len,通过 while 循环遍历每个字符(索引 i)。
    • 对于当前字符 s[i],下一个字符为 s[(i + 1) % len](利用取模 % 实现“循环衔接”:最后一个字符的下一个字符是第一个字符)。
    • 将当前字符与下一个字符相加(s[i] + s[(i + 1) % len]),直接输出结果字符。
  3. 输出格式:遍历过程中逐个输出计算得到的字符,最终拼接成“亲朋字符串”。
#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

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

http://www.dtcms.com/a/316840.html

相关文章:

  • 坚鹏:AI智能体软件是知行学成为AI智能体创新应用引领者的抓手
  • uvm-register-backdoor-access
  • SpringBoot AI心理学训练实战
  • 更改CodeBuddy的默认terminal为Git Bash
  • 随机森林算法详解:从集成学习原理到代码实现
  • Java技术栈/面试题合集(11)-设计模式篇
  • java web 未完成项目,本来想做个超市管理系统,前端技术还没学。前端是个简单的html。后端接口比较完善。
  • MySQL内外连接详解
  • 学习笔记-相似度匹配改进2
  • 机器学习——随机森林
  • Python高级编程与实践:Python高级数据结构与编程技巧
  • 【C++】Stack and Queue and Functor
  • C++二级考试核心知识点【内附操作题真题及解析】
  • Juc高级篇:可见性,有序性,cas,不可变,设计模式
  • SpringMVC(一)
  • Design Compiler:布图规划探索(ICC)
  • 《失落王国》v1.2.8中文版,单人或联机冒险的低多边形迷宫寻宝游戏
  • Modbus tcp 批量写线圈状态
  • centos7上如何安装Mysql5.5数据库?
  • 跨域场景下的Iframe事件监听
  • 【机器学习深度学习】模型量化
  • OSPF作业
  • Linux 基础
  • vue3 计算方式
  • GPS信号捕获尝试(上)
  • 【android bluetooth 协议分析 01】【HCI 层介绍 30】【hci_event和le_meta_event如何上报到btu层】
  • 【三个数公因数】2022-10-7
  • MySQL CONV()函数
  • 永磁同步电机无速度算法--基于二自由度结构的反推观测器TSBO
  • JAVA学习笔记 自增与自减的使用-006