2016-03-19 9 views
0

Ich habe dieses ObjektSetzen Sie eine "Ascii Art" printf in ein Char-Array?

void Game::Logo(void) 
{ 
    printf("     _ _ \n"); 
    printf("    (_|_)\n"); 
    printf(" __ _ ___ ___ _ _ \n"); 
    printf("/_`/__|/ __| | |\n"); 
    printf(" | (_| \__ \ (__| | |\n"); 
    printf(" \__,_|___/\___|_|_|\n"); 
    printf("      \n"); 
    printf("\n"); 
} 

Damit ich ein Array aus diesem zu schaffen, habe ich durch jede Zeile gehen und eine ,'', zwischen etwas setzen, und wenn der tatsächliche Name mit ich arbeite ist viel größer, es wird ewig dauern und anfällig für menschliche Fehler.

Wie würde ich eine Funktion erstellen, die das alles für mich ohne Fehler tun könnte, und möglicherweise verschiedene Optionen für die Array-Größe entsprechend der Größe des "Logos".

würde ich mich über Leitung jedes in einen String zu speichern:

string row0 = "     _ _ "; 
string row1 = "    (_|_)"; 
string row2 = " __ _ ___ ___ _ _ "; 
string row3 = "/_`/__|/ __| | |"; 
string row4 = " | (_| \__ \ (__| | |"; 
string row5 = " \__,_|___/\___|_|_|"; 
string row6 = "      "; 

und dann eine Funktion dieser Art zu schaffen:

printfToArray(int numRow,int numCol, string rows) 
{ 
    for (int i = 0; i < numRow; i++) 
    { 
     //create an array of char logo[numRow][numCol] 
     //numCol is the number of max space require, so this case, 23 because of \n as well 
     //then copy it somehow into the array within loop 
    } 
} 

int numRow = 7; //because 7 strings 

wie diese scheint wie die einzige Art und Weise kann ich Ferne denken , aber ich verstehe nicht, wie ich das machen würde.

+0

Ich glaube, Sie benötigen [diese] (http://www.asciiarts.net/)? – SCaffrey

+0

@SCaffrey nein nein, ich meinte eine multidimensionale Anordnung von lol mit allen printfs darin zu erstellen. – Robolisk

+0

Wenn Sie Probleme mit den Codes haben, die Sie mit '\\ 'überall eingeben müssen, dann verwenden Sie rohe String-Literale. – 3442

Antwort

5

Sie können std::vector verwenden, um die Zeilen in einem Array zu setzen

#include <iostream> 
#include <string> 
#include <vector> 

int main() 
{ 
    std::vector<std::string> vs 
    { 
     R"(    _ _)", 
     R"(    (_|_))", 
     R"( __ _ ___ ___ _ _)", 
     R"(/_`/__|/ __| | |)", 
     R"(| (_| \__ \ (__| | |)", 
     R"( \__,_|___/\___|_|_|)", 
     R"(     )" 
    }; 

    for (auto s : vs) 
     std::cout << s << "\n"; 

    return 0; 
} 
+0

Ich werde das jetzt ausprobieren – Robolisk

+1

Es wäre wahrscheinlich besser, die Zeilenumbrüche (und die führenden Leerzeichen und die Leerzeilen) in den Daten wegzulassen, so dass es mit anderen ASCII-Art auf der gleichen Zeile der Ausgabe kombiniert werden konnte . Sie würden stattdessen die Zeilenumbrüche in die Ausgabeoperation einschließen. Aber der Vektor der Saiten ist zweifellos der richtige Weg. –

+0

Dies funktioniert nicht richtig. Wenn Sie nicht rohe Zeichenfolgenliterale verwenden (oder "\\" überall eingeben), erfinden Sie die Escapesequenz "\ _'". ** Bearbeiten **: Bearbeitet den Beitrag, der dies berücksichtigt. – 3442

Verwandte Themen