重复存储在变量x中的字符串

时间:2015-01-09 04:59:46

标签: python c++ string printing

我希望多次打印存储在变量中的字符串。在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()函数格式化并正常工作。

非常感谢任何帮助。

2 个答案:

答案 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;
}