top1编程
← 返回题目
题解

交换字符串

1 条题解

  • 0
    @ 2026-8-5 16:07:42

    解题思路

    这道题要求用两个字符数组分别保存两个字符串,然后把它们交换,再分别输出。

    交换两个变量的值,是编程里最经典的操作,需要一个**临时的“空杯子”**来帮忙:

    假如杯子 A 里装着水,杯子 B 里装着牛奶,要交换它们,我们不能直接把 A 倒进 B,因为 B 里还有牛奶会混在一起。正确的做法是:

    1. 先把 A 的水倒进空杯子 T;
    2. 再把 B 的牛奶倒进 A;
    3. 最后把 T 里的水倒进 B。

    C++ 里字符数组保存字符串时,结尾会有一个 '\0' 表示字符串结束。所以复制字符串的时候,要把 '\0' 也一起复制过去,否则输出时会出错。

    解题步骤:

    1. 读入两个字符串 a、b;
    2. 用临时字符数组 t 把 a 复制下来;
    3. 把 b 复制给 a;
    4. 把 t(原来 a 的内容)复制给 b;
    5. 输出交换后的 a 和 b。

    参考代码

    // P4591 交换字符串:交换两个字符数组中保存的字符串并输出
    #include <iostream>
    using namespace std;
    
    int main() {
        char a[205], b[205], t[205];  // 两个字符数组 + 一个临时数组
        cin >> a >> b;
        int i;
        // 第一步:把 a 复制到 t(相当于倒进空杯子)
        for (i = 0; a[i]; i++) t[i] = a[i];
        t[i] = '\0';                  // 补上字符串结束符
        // 第二步:把 b 复制到 a
        for (i = 0; b[i]; i++) a[i] = b[i];
        a[i] = '\0';
        // 第三步:把 t(原来的 a)复制到 b
        for (i = 0; t[i]; i++) b[i] = t[i];
        b[i] = '\0';
        cout << a << endl << b << endl;  // 输出交换后的两个字符串
        return 0;
    }
    

    复杂度分析

    两个字符串的长度都不超过 200。程序对每个字符最多复制三次(复制到 t、复制到 a、复制到 b),时间大约是 O(n),其中 n 是字符数组的长度。额外用了一个和 a 等长的临时数组 t,空间是 O(n)。

    • 1