用c ++字符串替换snprintf

Bas*_*gar 0 c c++ printf stdstring

我需要使用snprintfwith 替换C char缓冲区std::string并对它们执行相同的操作.我被禁止使用stringstreamboost库.

有办法吗?

const char *sz="my age is";
std::string s;
s=sz;
s+=100;
printf(" %s \n",s.c_str());
Run Code Online (Sandbox Code Playgroud)

我把输出作为

my age is d 
Run Code Online (Sandbox Code Playgroud)

所需输出的位置是:

my age is 100
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 6

这正是stringstream发明s 的那种工作,因此将它们排除在外似乎相当愚蠢.

尽管如此,是的,你可以很容易地做到这一点:

std::string s{" my age is "};

s += std::to_string(100);

std::cout << s << " \n";
Run Code Online (Sandbox Code Playgroud)

如果您遇到了不支持的旧编译器to_string,您可以很容易地编写自己的编译器:

#include <string>

std::string to_string(unsigned in) { 
    char buffer[32];
    buffer[31] = '\0';
    int pos = 31;

    while (in) {
        buffer[--pos] = in % 10 + '0';
        in /= 10;
    }
    return std::string(buffer+pos);
}
Run Code Online (Sandbox Code Playgroud)

  • 你应该标记它只适用于C++ 11. (2认同)