用c ++字符串替换snprintf

时间:2013-12-17 06:17:52

标签: c++ c stdstring printf

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

有办法吗?

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

我得到输出为

my age is d 

所需的输出为:

my age is 100

2 个答案:

答案 0 :(得分:6)

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

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

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

s += std::to_string(100);

std::cout << s << " \n";

如果您遇到不支持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);
}

答案 1 :(得分:3)

编辑您的代码,如下所示

const char *sz="my age is";
std::string s{sz};
s+=std::string{" 100"};
std::cout << s << '\n';

您需要将字符串连接到字符串,而不是字符串的整数。
如果年龄在不同的运行中有所不同,您可以使用sprintf从中生成一个字符串,然后附加到字符串s

std::string s{" my age is "};
int age = 30;
char t[10] = {0};
sprintf(t, "%d", age);
s += std::string{t};
std::cout << s << '\n';