有没有办法在没有循环的情况下编写尽可能少的代码:
for (int i = 0; i < 10; i++) std::cout << 'x';
就像在 python 中一样:
print 'x' * 10
有没有办法在没有循环的情况下编写尽可能少的代码:
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);
}
}
应该做的伎俩。
最可扩展/可重用的方法是只创建一个类似于上面 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::generate_n(
std::ostream_iterator<char>(std::cout, ""),
10,
[](){ return 'x'; }
);
由于没有其他人提供合理的实现:
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 中定义它们将是未定义的行为,但恕我直言,无论如何你都可以侥幸逃脱。