输入一个字符串以及z字形的行数,将它按照z字形重排后输出。使用C++编程
时间: 2024-11-15 19:33:27 浏览: 8
在C++中,实现一个函数来按Z字形排列字符串可以使用两层循环,外层控制行的移动方向(从左到右、再到上),内层负责填充每一行。以下是基本的步骤和伪代码:
```cpp
#include <iostream>
#include <vector>
#include <string>
std::string zigzagPrint(std::string str, int rows) {
if (str.empty() || rows <= 0) return "";
std::vector<std::vector<char>> grid(rows, std::vector<char>(str.size()));
int row = 0;
int col = 0;
bool up = true; // 初始朝上
for (char c : str) {
grid[row][col++] = c;
if (col == grid[0].size()) { // 到达最右侧,转下一行
col = 0;
row += up ? 1 : -1; // 如果向上,加1;向下,减1
up = !up; // 切换方向
} else if (row == grid.size() - 1) { // 到达最后一行,向右移动直到结束
while (col < grid[0].size()) {
grid[row][col++] = c;
}
}
}
std::string result;
for (const auto &row : grid) {
for (char c : row) {
result += c;
}
result += '\n'; // 每行结尾添加换行符
}
return result.substr(0, result.size() - 1); // 去掉最后的换行符
}
int main() {
std::string input = "Hello, World!";
int numRows = 4;
std::cout << "Zigzag Print:\n" << zigzagPrint(input, numRows);
return 0;
}
```
这个程序首先检查输入是否为空或行数无效,然后创建一个二维字符数组网格来存储每个位置的字符。通过改变`row`和`col`变量以及`up`标志,我们可以按照Z字形填充字符串。最后,将网格内的字符连接成字符串并返回。
阅读全文