我希望打印一个字符串存储在一个变量多次。在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()函数格式化的,工作正常。
任何帮助都是非常感谢的。
发布于 2015-01-09 06:14:35
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,然后写到它,然后使用它的str()成员作为std::string来获取内容。
发布于 2015-01-09 07:02:17
如果需要,可以创建一个简单的助手函数来执行任务:
示例:
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;
}https://stackoverflow.com/questions/27854109
复制相似问题