13

在 python 中,以下指令:print 'a'*5将输出aaaaa. std::ostream为了避免for构造,如何在 C++ 中结合 s 编写类似的东西?

4

5 回答 5

33

显而易见的方法是fill_n

std::fill_n(std::ostream_iterator<char>(std::cout), 5, 'a');

另一种可能性是只构造一个字符串:

std::cout << std::string(5, 'a');
于 2012-07-10T20:48:24.583 回答
5

使用一些棘手的方法: os << setw(n) << setfill(c) << ""; 其中 n 是要写入的字符 c 的数量

于 2012-07-10T20:50:52.777 回答
4

在 C++20 中,您将能够使用它std::format来执行此操作:

std::cout << std::format("{:a<5}", "");

输出:

aaaaa

同时你可以使用基于的 {fmt}std::format。{fmt} 还提供了print使这更容易和更高效的功能(godbolt):

fmt::print("{:a<5}", "");

免责声明:我是 {fmt} 和 C++20 的作者std::format

于 2020-12-16T16:06:44.143 回答
2

您可以通过重载*std::string 的运算符来执行类似的操作。这是一个小例子

#include<iostream>
#include<string>
std::string operator*(const std::string &c,int n)
{
    std::string str;
    for(int i=0;i<n;i++)
    str+=c;
    return str;
}
int main()
{
    std::string str= "foo";
    std::cout<< str*5 <<"\n";
}
于 2012-07-10T20:50:19.350 回答
0

该标准没有提供任何优雅的方式。但是一种可能性(我最喜欢的)是使用这样的代理对象

class repeat_char
{
public:
    repeat_char(char c, size_t count) : c(c), count(count) {}
    friend std::ostream & operator<<(std::ostream & os, repeat_char repeat)
    {
        while (repeat.count-- > 0)
            os << repeat.c;
        return os;
    }
private:
    char c;
    size_t count;
};

然后以这种方式使用它

std::cout << repeat_char(' ', 5);
于 2021-06-19T08:20:16.607 回答