2016-03-19 9 views
0

Ben bu nesne ile çalışıyorum asıl adı olduğunda ben, her hat üzerinden gitmek zorunda bunun dışında bir dizi oluşturmak ve bir şey arasında bir ,'', koymak ve için içinBir "ascii art" printf'i bir char dizisine mi ekliyorsunuz?

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

çok daha büyük, sonsuza dek sürecek ve insan hatasına eğilimli olacak.

Hatalı bir şekilde benim için bunu yapabilecek bir işlevi nasıl oluşturabilirim ve "logo" boyutuna göre dizi boyutu için olası farklı seçenekler. Ben uzaktan düşünebildiğim tek yol gibi bunlar

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 

görünüyor: Bir bu tür bir işlev oluşturmuş sonra

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

ve:

Ben bir dize konusunda çizgiyi her depolanması hakkında giderdim ama yine de bunu yapmayı nasıl yapacağımı anlamıyorum.

+0

bence satırları koymak için std::vector kullanabilirsiniz [bu] (http://www.asciiarts.net/)? – SCaffrey

+0

@SCaffrey hayır hayır, tüm printf'ler içinde çok boyutlu bir lol dizisi oluşturmak istedim. – Robolisk

+0

Çakışan kodlarla ilgili sorunlarınız varsa (her yerde '\\' yazmak zorunda), ardından ham dize değişmezlerini kullanın. – 3442

cevap

5

Sen size ihtiyacı olan bir dizi

#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

Şimdi bunu deneyeceğim. – Robolisk

+1

Verilerdeki yeni satırların (ve boşlukların ve boş satırların) çıkarılması daha iyi olurdu, böylece aynı ASCII sanatı ile aynı çıktıda birleştirilebilir . Bunun yerine çıkış işleminde yeni satırları dahil edersiniz. Ama dizelerin vektörü kuşkusuz gitmek için doğru yoldur. –

+0

Bu düzgün çalışmıyor. Ham dizgi değişmezlerini kullanmazsanız (veya her yerde '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''} '' ** '' ** Düzenleme: Bunu dikkate alarak yazıyı düzenleyin. – 3442

İlgili konular