我希望多次打印存储在变量中的字符串。在python中,我可以通过使用类似的东西来做到这一点:
l1= "*" * width
l2= "*" + (" " * (width-2)) + "*\n"
l3= l2 * ((height-4)/2)
用户提供高度和宽度作为输入。最终还有其他几行代码会打印一个* s的矩形。
在C ++中有一种简单的方法吗?
我尝试使用l2= std::string((height-4)/2, l1);
,但这会导致错误,因为C ++需要一个字符串来代替L2。 (l1使用std::string()
函数格式化并正常工作。
非常感谢任何帮助。
答案 0 :(得分:1)
std::string
有一个带有字符和重复参数的构造函数,您可以直接使用它来生成顶行和底行,如:
std::string l1 = std::string(width, '*') + "\n";
同样,“中间”行可以生成如下:
std::string l2 = "*" + std::string(width-2, ' ') + "*\n";
至于将各个部分组合成一个正方形,我可能会使用std::generate_n
来生成中间行,所以代码看起来像这样:
auto l1 = std::string(width, '*') + "\n";
std::cout << l1;
std::generate_n(std::ostream_iterator<std::string>(std::cout),
height-2,
[=] {return "*" + std::string(width - 2, ' ') + "*\n"; });
std::cout << l1;
如果您确实需要字符串中的结果而不是写入cout
,则可以用ostringstream
代替cout
,然后写入,然后使用{ {1}}成员将内容设为str()
。
答案 1 :(得分:0)
如果需要,您可以创建一个简单的辅助函数来执行任务:
示例:
string stringMultiplier(string startString, int multiplier){
string endString = startString;
for (int i=1; i<multiplier; i++){
endString = endString + startString;
}
return endString;
}
int main()
{
cout << stringMultiplier("*",4) << endl;
return 0;
}