замена snprintf на строки c ++

0

У меня есть требование заменить буферы 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
  • 0
    На самом деле, я понимаю, буст-кейс, но почему запрещен stringstream? Они оба в std ::
  • 0
    stringstream не является расширением библиотеки, он находится в той же стандартной библиотеке, что и сама строка.
Показать ещё 1 комментарий
Теги:
printf
stdstring

2 ответа

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);
}
  • 2
    Вы должны отметить, что это работает только в C ++ 11.
  • 0
    @DominikC: C ++ 11 достаточно широко доступен, поэтому я рассматриваю его как синоним "C ++", если не указана другая версия.
Показать ещё 8 комментариев
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';
  • 0
    да, это будет работать и это один из способов избежать to_string, так как он не поддерживается моим компилятором
  • 0
    Это не помогает справиться с ситуацией, когда число находится в переменной со значением неизвестным во время компиляции.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню