C++:在没有显式循环的情况下重复输出i次
C++: Repeat output i times without an explicit loop
有没有办法做到这一点而不需要循环写尽可能少的代码:
for (int i = 0; i < 10; i++) std::cout << 'x';
类似于python:
print 'x' * 10
使用std::string(size_t, char)
构造函数:
std::cout << std::string(10, 'x');
请注意,与Python不同,这只适用于字符,而不适用于字符串。
void print(const char *s, int n)
{
if (n > 0)
{
cout << s;
print(s, n - 1);
}
}
应该做到这一点。
std::generate_n(
std::ostream_iterator<char>(std::cout, ""),
10,
[](){ return 'x'; }
);
最可扩展/可重用的方法是创建一个类似于Ed的函数,尽管我会使用字符串流,而不会将该函数与打印耦合
IMO,NPE的答案限制性太强,因为它只能是一个字符,而Ed的答案更像是一个C答案,而不是C++答案。作为一个附带的好处,该函数还允许您流式传输字符、整数、字符串等。
template <class T>
std::string multiplyString(int count, const T &input)
{
std::stringstream ss;
for(int i = 0; i < count; i++)
ss << T;
return ss.str();
}
int main(argc, char *argv[])
{
std::cout << multiplyString(10, 'x') << std::endl;
std::cout << multiplyString(5, "xx") << std::endl;
std::cout << multiplyString(5, 1234) << std::endl;
}
祝好运
由于没有其他人提供合理的实现:
std::string
multiplyStrings( int count, std::string const& original )
{
std::string results;
results.reserve( count * original.size() ); // Just optimization
while ( count > 0 ) {
results += original;
}
return results;
}
由此创建operator*
的重载不会困难的在命名空间std中定义它们将是未定义的行为,但IMHO,你很有可能无论如何都可以逃脱惩罚。
相关文章:
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 在 c++ 中在开关情况下使用和不使用"break"时的不同输出
- 为什么在这种情况下,bool 类型的输出等于 0?
- CMake:默认情况下,如何使add_custom_command输出保持最新?
- 如何在不丢失输出的情况下杀死/停止终端中正在运行的进程?
- 在这种情况下,如何防止C++输出/控制台窗体关闭
- 两种情况下的输出不应该相同吗?
- STL:在没有输出的情况下处理两个集合
- 在存在错误代码的情况下输出参数与 NRVO
- 如何输出a'&quot在不使用线端的情况下进行文件
- 如何在不将其连接到终端的情况下运行'screen',以便我可以在C++ (qt) 应用程序中捕获输出?
- 为什么在浮点比较中,最后一个小数位数为5的浮点值能给出正确的输出,而在其他情况下却不是
- 在SEGFAULT的情况下,了解GDB输出
- 如何在不移动C 中的光标坐标的情况下输出文本以控制特定坐标
- 如何仅在对象存在/特定情况下输出对象的某个部分?
- 如何在不破坏现有代码的情况下将输出参数添加到功能
- 如何在不使用cout/printf的情况下输出文本在cpp和c中
- 如何防止ostringstream(或类似)在没有设置精度的情况下输出科学记数法
- 如何在没有iostream的情况下输出到控制台窗口
- 重载运算符<<在不使用友元函数的情况下输出对象成员