我正在尝试编写一个迷你程序,它基本上采用字符串向量(来自用户输入)并显示或打印出增加的&降低了它的分辨率(大小)。
它会将每个字符串的每个字符增加或减少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我在课堂上写了这个函数。
在这种情况下,我正在编写一个提高分辨率的函数。我认为降低分辨率的想法是一样的。
答案 0 :(得分:2)
您将串联字符串而不是连接字符。从每个字符而不是每个字符串形成所需的字符串:
std::cout << std::string(4, art[i][j]); //put the newline in the outer loop
您还应该考虑将参数设置为const 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
}
答案 1 :(得分: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;
}
}