У меня есть требование заменить буферы C char, используя snprintf
на std::string
и выполнить на них ту же операцию. Мне запрещено использовать библиотеку stringstream
или boost
.
Есть ли способ сделать это?
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
Это именно та работа, для которой был изобретен 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);
}
Отредактируйте свой код, как показано ниже,
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';