试图打印转义字符x次

时间:2014-03-28 17:04:48

标签: c++ visual-studio-2012 printf

所以我想做点什么     printf(“%s”,“\ t'* 3); 我只是想知道是否有办法在没有循环的情况下打印这样的东西

2 个答案:

答案 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');

关于“没有循环”部分......当然,printfstd::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();
}