所以我想做点什么 printf(“%s”,“\ t'* 3); 我只是想知道是否有办法在没有循环的情况下打印这样的东西
答案 0 :(得分:0)
printf("%s%s%s", "\t", "\t", "\t");
?开玩笑。但是既然你已经将它标记为C ++,并且因为我不知道你在这里试图解决哪些更高级别的问题,你是否考虑过使用适当的std::string
constructor?
std::string s(3, '\t');
如果您真的坚持, 甚至可以将其与printf
一起使用...
printf("%s", std::string(3, '\t').c_str());
但为什么不使用std::cout
?
std::cout << std::string(3, '\t');
关于“没有循环”部分......当然,printf
和std::string
都可能在其实现中有循环。但这不应该打扰你。
答案 1 :(得分:0)
假设您运行运行时循环并且允许使用boost,您可以使用模板在编译时创建字符串:
#include <iostream>
#include <boost/mpl/char.hpp>
#include <boost/mpl/string.hpp>
using namespace boost;
template <unsigned int C, int R>
struct repchrn
{
typedef typename mpl::push_back<typename repchrn<C, R - 1>::string, mpl::char_<C>>::type string;
static const char* getString() { return mpl::c_str<string>::value; }
};
template <unsigned int C>
struct repchrn<C, 0>
{
typedef mpl::string<> string;
static const char* getString() { return mpl::c_str<string>::value; }
};
int main() {
printf("%s", repchrn<'a', 5>::getString());
/* or */ std::cout << std::endl;
std::cout << repchrn<'a', 5>::getString();
}