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

Repeat a string stored in a variable x number of times

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

非常感谢任何帮助。

std::string 有一个构造函数,它接受一个字符和一个重复参数,您可以直接使用它来生成顶行和底行,例如:

std::string l1 = std::string(width, '*') + "\n";

同样,"middle" 行可以这样生成:

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.

如果需要,您可以创建一个简单的辅助函数来执行任务:

示例:

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