2013-05-13 129 views
-5

我正在尝试编写一个基本上采用字符串矢量(来自用户输入)的小程序,并显示或打印出增加的分辨率(大小)减小的分辨率(大小)。字符串的分辨率/大小

这将增加或4. 实施例减少每个字符串的每一个字符:如果字符串是“ABCDEF”,那么增加的分辨率将是“aaaabbbbccccddddeeeeffff”

我有麻烦编写代码。我不希望它不仅遍历字符串向量,而且还希望它读取向量中每个字符串的字符并生成分辨率结果。

有没有办法做到这一点?我一直从编译器得到这些转换错误

void asci_art::bigresol(vector<string>art) 
{ 
    cout << "Increased Resolution of your artwork" <<endl; 

    for (int i = 0; i < art.size(); i++) 
    { 
     for(int j = 0; j < art[i].size(); j++) 
     { 
      cout << art[j] + art[j] + art[j] + art[j] << endl; 
     } 
    } 
    } 

btw我在类中写了这个函数。

在这种情况下,我在写一个提高分辨率的函数。我认为降低分辨率将是相同的想法。

+2

如果你通过了矢量艺术的值(在本例中),它会调用为载体的拷贝构造函数和创建一个副本的矢量,这是相当浪费。相反,通过指针(矢量 *部分)或const引用(const矢量&rart)传递它。 – edtheprogrammerguy 2013-05-13 20:58:39

+0

为什么标题说“C”? – 2013-05-13 20:58:43

+0

@PaulR我的意思是C++所以忽略 – user2188311 2013-05-13 21:00:11

回答

2

您将连接字符串而不是连接字符。形成从每一个字符,而不是每个字符串需要字符串:

std::cout << std::string(4, art[i][j]); //put the newline in the outer loop 

你也应该考虑让你的参数是一个const std::vector<std::string> &以免造成不必要的副本调用函数时。也考虑使用C++ 11中引入的nice-for语法:

for (const auto &str : art) { 
    for (auto c : str) { 
     std::cout << std::string(4, c); 
    } 

    std::cout << '\n'; //put a newline in between each transformed string 
} 
+0

我没有C++ 11 。我想我有一个更老的编译器 – user2188311 2013-05-13 21:12:46

+0

你认为?做'gcc -ver' – 2013-05-13 21:13:49

+0

@ user2188311,你不需要它来做到这一点,但它确实使它看起来更好看(在C++ 98/C++ 03中提升很多)。您可以尝试启用'-std = C++ 11'或'-std = C++ 0x'选项。另外,你的意思是在每个字符串之后打印换行符而不是每个字符组? – chris 2013-05-13 21:14:31

1

哎呀 - 我误解了。

我想这是你想要的东西,在你的风格:

void asci_art::bigresol(vector<string> art) 
{ 
    cout << "Increased Resolution of your artwork" << endl; 

    for (int i = 0; i < art.size(); i++) 
    { 
     line = art[i] 
     for(int j = 0; j < line.size(); j++) 
     { 
      for(int k=0; k<4; k++) 
       cout << line[j]; 
     } 
     cout << endl; 
    } 
} 
+0

有趣。那么为什么我应该把j <4?这在迭代中究竟做了什么?我不太明白 – user2188311 2013-05-13 21:04:37

+0

这会打印每个字符串四次。 – chris 2013-05-13 21:05:19

+0

不,这会打印出'abcdefabcdefabcdefabcdef' – 2013-05-13 21:11:59