【问题标题】:Repeat a string stored in a variable x number of times重复存储在变量中的字符串 x 次
【发布时间】:2015-01-09 04:59:46
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

  • 与您的代码一起使用,尽管它被破坏了,但 l1 的示例字符串、计数和所需的 l2 输出将 大声 说话回答你的问题。
  • @WhozCraig、l1 和所有其他变量将与上面的 python 代码中的相同。

标签: python c++ string printing


【解决方案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,并写入它,然后使用其str() 成员获取内容为std::string

【讨论】:

    【解决方案2】:

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

    例子:

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

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 2016-08-24
      • 2020-09-20
      • 1970-01-01
      • 2013-10-05
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多