Z 字形变换--返回以 Z 字形排列的字符串

本文介绍了如何使用C++编写一个函数convert,接受一个字符串和行数作为输入,如PAYPALISHIRING和3,将字符串按照Z字形排列,输出结果为PAHNAPLSIIGYIR。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//Z 字形变换:
//将字符串 "PAYPALISHIRING" 以 Z 字形排列成给定的行数:
//
//P   A   H   N
//A P L S I I G
//Y   I   R
//之后按逐行顺序依次排列:"PAHNAPLSIIGYIR"。编写一个函数,输入字符串和行数 numRows,
//返回以 Z 字形排列的字符串。
// 例如,输入字符串 "PAYPALISHIRING" 和 numRows = 3,返回 "PAHNAPLSIIGYIR"。
#include <iostream>
#include <vector>
#include <string>

using namespace std;

string convert(string s, int numRows) {
    if (numRows == 1) return s; // 当 numRows 为 1 时,直接返回原字符串

    vector<string> rows(min(numRows, int(s.size()))); // 创建 numRows 个字符串,存储每行的字符
    int curRow = 0; // 当前所在行
    bool goingDown = false; // 标记是否向下走

    for (char c : s) {
        rows[curRow] += c; // 将当前字符添加到对应行
        if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown; // 当到达 Z 字形转折点时改变方向
        curRow += goingDown ? 1 : -1; // 根据方向更新行数
    }

    string result;
    for (string& row : rows) {
        result += row; // 将每行字符串拼接起来
    }
    return result;
}

int main() {
    string s = "PAYPALISHIRING";
    int numRows = 3;
    cout << convert(s, numRows); // 输出转换后的字符串
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值