在'n'行中打印Zig-Zag字符串的连接

时间:2016-05-29 14:38:39

标签: c++ string vector

  

我收到了一个字符串和行数n。当以行Zig-Zag方式写入输入字符串时,打印通过连接n行形成的字符串

std::string str = convert("PAYPALISHIRING", 3); //str == "PAHNAPLSIIGYIR"

这是一个视觉图像

P.......A........H.......N
..A..P....L....S....I...I....G
....Y.........I........R

我写了以下代码

string Solution::convert(string A, int B) {//B is no of rows in zigzag pattern
    if(B==1)
        return A;
    int n=B;
    vector<string> vec;
    int dir=0;//0 means down, 1 means up
    int row=0;
    for(int i=0;i<A.length();i++)
    {
        vec[row].append(A,i,1);
        if(row==n-1)
            dir=1;//change to upwards
        if(row==0)
            dir=0;//change to downwards

        if(dir==0) row++;
        else row--;
    }
    string ans="";
    for(int i=0;i<B;i++)
        ans.append(vec[i]);

    return ans;
}

但对于所有B >= 2,它会产生分段错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这一行vec[row].append(A,i,1);

您正在访问索引row的字符串,但vec为空!你不能这样做,所以你得到一个分段错误!

您需要指定矢量的大小:

//'vec' will never have more than 'B' elements
std::vector<std::string> vec(B);