-6

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

它将每个字符串的每个字符增加或减少 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;
        }
     }
   }

顺便说一句,我在一个类中编写了这个函数。

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

4

2 回答 2

2

您正在连接字符串而不是连接字符。从每个字符而不是每个字符串中形成您需要的字符串:

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

您还应该考虑将参数设置为 aconst std::vector<std::string> &以避免调用函数时不必要的副本。还可以考虑使用 C++11 中引入的不错的 range-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
}
于 2013-05-13T21:00:11.173 回答
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;
    }
}
于 2013-05-13T21:01:06.483 回答