【卡码网C++基础课 12.位置互换】

2024-08-24 14:12

本文主要是介绍【卡码网C++基础课 12.位置互换】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 题目描述与分析
  • 一、交换变量
  • 二、代码编写


题目描述与分析

题目描述:
给定一个长度为偶数位的字符串,请编程实现字符串的奇偶位互换

输入描述:
输入包含多组测试数据。
输入的第一行是一个整数n,表示有测试数据。(整个输入中,只有一个n)
接下来是n组测试数据,保证串长为偶数位(串长<=50)。

输出描述:
请为每组测试数据输出奇偶位互换后的结果,每组输出占一行。

输入示例:

2
0aa0
bb00

输出示例:

a00a
bb00

奇偶位互换是指字符串的奇数位和偶数位相互交换位置,比如下面的字符串"0aa0", 前两位相互交换,后两位相互交换,返回的结果是a00a
在这里插入图片描述
想要完成字符串交换,需要完成以下步骤:

遍历字符串
第1位和第2位交换
第3位和第4位交换

第i位和第i + 1位交换
第i+2位和第i+3位交换
可以看到交换的操作是一直都有的,对于这个一直存在的操作,我相信大家一定能联想到上一节的函数,那我们就先来看看这个交换字符串的函数是怎么写的吧。

一、交换变量

两个字符是如何相互交换的呢?

想象一下,你现在手里有两个杯子,一个杯子里装了雪碧,另一个杯子里装了可乐,要怎么把这两个杯子的饮料相互交换呢?

常规情况下当然是不可能把这两个杯子里的饮料直接进行交换的,我们应该引入第三个杯子
在这里插入图片描述把第一个杯子里的雪碧倒入第三个杯子中,这样第一个杯子就成了空杯子,第三个杯子里盛放的是雪碧
再把第二个杯子里的可乐倒入第一个杯子中,这样第二个杯子就是空的,第一个杯子里装的是可乐
再把之前倒入第三个杯子里的雪碧倒入第二个杯子中,这样第二个杯子装的是雪碧
经过上面的操作,就将两个杯子里的可乐和雪碧完成了交换,该操作转换成代码如下:

// 不返回(return)结果,所以返回类型为void, 函数名称为swap
// 传入的参数为两个字符,所以类型为char, 参数名称为a 和 b
void swap(char &a, char &b) { // 交换两个字符串, a和b的内容需要改变,所以需要传递引用// 定义第三个字符,并将字符a的内容赋值给第三个字符char tmp = a;// 将字符a的内容修改为字符b的内容a = b;// 将字符b的内容修改为第三个字符的内容,也就是字符a的内容,a和b之间完成替换b = tmp;
}

二、代码编写

照例,我们先把代码的基础结构先写好

#include<iostream>
#include<string>
using namespace std;
int main() {int n;cin >> n; // 输入n,表示包含n组字符串string s; // 接受每次输入的字符串while(n--) {cin >> s; // 输入字符串}
}

把之前写的swap函数定义完整

void swap(char &a, char &b) { // 交换两个字符串char tmp = a;a = b;b = tmp;
}

接着,我们需要遍历字符串,并将当前字符和下一位字符两两交换,当完成第一位和第二位的交换之后,我们应该控制迭代的步数为2,执行第三位和第四位的交换。

for (int i = 0; i < s.size() - 1; i += 2) { // 遍历字符串的时候注意控制迭代的步数为2// 当前字符和下一个字符进行交换swap(s[i], s[i + 1]);
}

将完成互换的字符串输出即可

cout << s << endl;

完整代码如下:

#include<iostream>
#include<string>
using namespace std;
void swap(char &a, char &b) { // 交换两个字符串char tmp = a;a = b;b = tmp;
}
int main() {int n;cin >> n;string s;while (n--) {cin >> s; // 接收字符串sfor (int i = 0; i < s.size() - 1; i += 2) { // 在s字符串上原地修改swap(s[i], s[i + 1]); // 调用函数,完成字符串交换}cout << s << endl;}
}

这篇关于【卡码网C++基础课 12.位置互换】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102704

相关文章

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat