2017-10-05 47 views
0

我目前正在研究我的程序。该程序从用户接收整型输入,然后我的程序将打印输入的ASCII艺术。ASCII艺术(数值)输出C++

例如:

Input : 123 Output : # ### ### # # # # ### ## # # # # ### ###

的问题是如何打印彼此相邻多少?我的程序转换,但输出变的这样
OutputBroken

相反:# ### ### # # # # ### ## # # # # ### ###

这里是我的代码:

#include <iostream> 

using namespace std; 

int main(){ 
int angka,dpn,blk,tng; 
string abel,ateng,adep; 

cout<<"Masukkan Angka : "; 
cin>>angka; 

blk = angka % 10; 
tng = angka/10 % 10; 
dpn = angka/100; 

switch(blk){ 
    case 0 : abel = "### \n# # \n# # \n# # \n### "; break; 
    case 1 : abel = "# \n# \n# \n# \n# "; break; 
    case 2 : abel = "### \n # \n### \n# \n### "; break; 
    case 3 : abel = "### \n # \n ## \n # \n### "; break; 
    case 4 : abel = "# # \n# # \n### \n # \n # "; break; 
    case 5 : abel = "### \n# \n### \n # \n### "; break; 
    case 6 : abel = "### \n# \n### \n# # \n### "; break; 
    case 7 : abel = "### \n # \n # \n # \n # "; break; 
    case 8 : abel = "### \n# # \n### \n# # \n### "; break; 
    case 9 : abel = "### \n# # \n### \n # \n### "; break; 

} 
switch(tng){ 
    case 1 : ateng = "# \n# \n# \n# \n# "; break; 
    case 2 : ateng = "### \n # \n### \n# \n### "; break; 
    case 3 : ateng = "### \n # \n ## \n # \n### "; break; 
    case 4 : ateng = "# # \n# # \n### \n # \n # "; break; 
    case 5 : ateng = "### \n# \n### \n # \n### "; break; 
    case 6 : ateng = "### \n# \n### \n# # \n### "; break; 
    case 7 : ateng = "### \n # \n # \n # \n # "; break; 
    case 8 : ateng = "### \n# # \n### \n# # \n### "; break; 
    case 9 : ateng = "### \n# # \n### \n # \n### "; break; 

} 

switch(dpn){ 
    case 1 : adep = "# \n# \n# \n# \n# \n"; break; 
    case 2 : adep = "### \n # \n### \n# \n### "; break; 
    case 3 : adep = "### \n # \n ## \n # \n### "; break; 
    case 4 : adep = "# # \n# # \n### \n # \n # "; break; 
    case 5 : adep = "### \n# \n### \n # \n### "; break; 
    case 6 : adep = "### \n# \n### \n# # \n### "; break; 
    case 7 : adep = "### \n # \n # \n # \n # "; break; 
    case 8 : adep = "### \n# # \n### \n# # \n### "; break; 
    case 9 : adep = "### \n# # \n### \n # \n### "; break; 

} 


//cout<<dpn<<endl<<blk<<endl<<tng; /*DebugNumber*/ 

cout<<adep<<ateng<<abel; 
return 0; 
} 
+2

为线条存储一个字符串矢量,只有当您知道每行打印什么时才打印它们 – user463035818

+0

考虑使用[原始字符串文字](http://en.cppreference.com/w/cpp/language/string_literal )为[可读性](http://coliru.stacked-crooked.com/a/82f97eb8976baae9)。 – nwp

+0

您可能不得不将艺术存储在数组中而不是给\ n。并重复每个数字打印从艺术的顶部到底部。 – crook

回答

1

这是不是C++,它是关于算法。可在例如存储在下面的结构中的输出:

using Output = std::vector<std::vector<bool>>; 

和写一个函数,它增加了一个字符到其中:

void addCharacter(Output o, size_t offset, char theChar) { 
    for (int i=0; i<allLines; i++) 
    addLineOfChar(o, offset, theChar, i); 
} 

void addLineOfChar(Output o, size_t offset, char theChar, int line) { 
    for (int i=0; i<charsInLine; i++) 
    o[offset+i] = data[theChar][line][i]; 
} 

和Et结束打印true作为#false(空间)。但这只是一个想法。这是你创造最佳算法的工作。

+0

我很抱歉,但我无法理解代码。我是计算机编程新手。但是,谢谢,也许我以后会需要它 –