在 python 中,以下指令:print 'a'*5
将输出aaaaa
. std::ostream
为了避免for
构造,如何在 C++ 中结合 s 编写类似的东西?
问问题
6953 次
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 回答