12. 位置互换

64 阅读2分钟

题目描述

给定一个长度为偶数位的字符串,请编程实现字符串的奇偶位互换。

输入描述

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

输出描述

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

输入示例

2
0aa0
bb00

输出示例

a00a
bb00

本节课我们将学到字符串的奇偶位互换

比如0aa0换成aooa

image.png 需要以下几步

  1. 遍历字符串
  2. 第1位和第2位交换
  3. 第3位和第4位交换
  4. ...
  5. 第i位和第i+1位交换
  6. 第i+2位和第i+3位交换

1.交换变量

直接交换两个变量是不现实的,此时需要引入第三个变量

int x = 1;
int y = 2;
int temp = x;
x = y;
y = temp;

使用函数实现

void swap(char &a,char &b){
    char tmp = a;
    a = b;
    b = temp;
}

2.代码编写

1.代码结构

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n;
    cin >> n;
    string s;
    while(n--){
        cin >> s;
    }
    return 0;
}

2.swap函数定义完整

void swap(char &a, char &b){
    char tmp = a;
    a = b;
    b = temp;
}

3.遍历字符串

//两两交换,1和2交换完之后,迭代器+2,3和4交换
for(int i = 0; i < s.size()-1; i+=2){
    swap(s[i],s[i + 1]);
}

4.互换字符串输出

cout << s << endl;

5.完整代码

#include <bits/stdc++.h>

using namespace std;

void swap(int &a,int &b){
    int temp = a;
    a = b;
    b = temp;

}

int main(){
    int n;
    cin >> n;
    string s;
    while(n--){
        cin >> s;
        for(int i = 0;i < s.size()-1;i+=2){
            swap(s[i],s[i+1]);
        }
    cout << s << endl;   
    }
    return 0;
}