2016-05-29 11 views
0

Ich habe eine Zeichenfolge und Anzahl der Zeilen n gegeben. Drucken Sie die Zeichenfolge gebildet durch Verkettung n Reihen, wenn Eingabezeichenfolge in zeilenweise Zig-Zag Art und Weise geschriebenPrint Verkettung von Zick-Zack-String in 'n' Zeilen

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

Hier ist ein visuelles Bild

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

Ich schrieb den folgenden Code

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; 
} 

Aber für alle B >= 2 gibt es einen Segmentierungsfehler.

Irgendwelche Ideen?

Antwort

1

Diese Linie vec[row].append(A,i,1);.

Sie greifen auf die Zeichenfolge mit dem Index row zu, aber vec ist leer! Sie können das nicht, Sie erhalten also einen Segmentierungsfehler!

Sie müssen die Größe des Vektors spezifizieren:

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

Yeah ... Vielen Dank ... Es half !! –