题解
交换字符串
1 条题解
-
0
解题思路
这道题要求用两个字符数组分别保存两个字符串,然后把它们交换,再分别输出。
交换两个变量的值,是编程里最经典的操作,需要一个**临时的“空杯子”**来帮忙:
假如杯子 A 里装着水,杯子 B 里装着牛奶,要交换它们,我们不能直接把 A 倒进 B,因为 B 里还有牛奶会混在一起。正确的做法是:
- 先把 A 的水倒进空杯子 T;
- 再把 B 的牛奶倒进 A;
- 最后把 T 里的水倒进 B。
C++ 里字符数组保存字符串时,结尾会有一个 '\0' 表示字符串结束。所以复制字符串的时候,要把 '\0' 也一起复制过去,否则输出时会出错。
解题步骤:
- 读入两个字符串 a、b;
- 用临时字符数组 t 把 a 复制下来;
- 把 b 复制给 a;
- 把 t(原来 a 的内容)复制给 b;
- 输出交换后的 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