用C++实现字符串的z字形变换重排
时间: 2024-11-17 20:28:52 浏览: 1
Z字形变换(也称作蛇形排列或Zigzag遍历)是指将给定的一维字符串按照一定的规则排列成类似字母“Z”的形状。在C++中,我们可以先将原始字符串按行分割,然后按照交替的方向逐行读取字符。以下是实现的一个简单示例:
```cpp
#include <iostream>
#include <vector>
#include <string>
// Z形变换重排函数
std::string zigzagOrder(std::string s) {
std::vector<std::string> rows;
for (int i = 0, j = 0; i < s.length(); ++i) {
// 将字符串按列切割
rows[j++] += s[i];
if (j % 2 == 0) { // 当行数为偶数时,向右移动
++i;
} else { // 行数为奇数时,向下移动
j = --j;
}
}
// 合并行构成最终的Z形字符串
std::string result;
for (const auto &row : rows) {
result += row;
}
return result;
}
int main() {
std::string input = "PAYPALISHIRING";
std::string output = zigzagOrder(input);
std::cout << "Z字形变换后的字符串: " << output << std::endl;
return 0;
}
```
在这个例子中,我们首先创建一个空的`rows`向量用于存储每一行的字符。然后,从第一个字符开始遍历字符串`s`,每次向右或向下移动一行,直到遍历完整个字符串。最后,我们将所有的行合并成一个字符串,得到Z字形的结果。
注意,这个实现假设输入字符串长度为奇数,如果是偶数,最后一行可能会少一个字符。如果你处理的是偶数长度的情况,可以在判断行数的时候稍微调整一下条件。
阅读全文