Подтвердить что ты не робот

С++ создает строку текста и переменных

Я пытаюсь сделать что-то очень простое, и все же, после часа поиска, я не могу найти подходящий ответ, поэтому я должен упустить что-то довольно очевидное.

Я пытаюсь динамически создавать имена файлов для использования с ifstream. Хотя я понимаю, что для этого доступны различные методы, я решил создать std::string и использовать stringname.c_str для преобразования в const.

Однако проблема заключается в том, что мне нужно создать строку с сочетанием переменных и предопределенных текстовых значений. Я получаю ошибки компилятора, поэтому это должна быть проблема синтаксиса.

Pseudo

std::string var = "sometext" + somevar + "sometext" + somevar;

Спасибо!

4b9b3361

Ответ 1

Считаете ли вы использование строковых потоков?

#include <string>
#include <sstream>

std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();

Ответ 2

std::string var = "sometext" + somevar + "sometext" + somevar;

Это не работает, потому что добавления выполняются слева направо, а "sometext" (первый) - это просто const char *. У него нет operator+ для вызова. Самое простое исправление:

std::string var = std::string("sometext") + somevar + "sometext" + somevar;

Теперь первый параметр в списке слева направо + - это std::string, который имеет operator+(const char *). Этот оператор создает строку, которая заставляет остальную часть цепи работать.

Вы также можете сделать все операции на var, который является std::string и поэтому имеет все необходимые операторы:

var = "sometext";
var += somevar;
var += "sometext";
var += somevar;

Ответ 3

В С++ 11 вы можете использовать std:: to_string:

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);  

Ответ 4

Вы также можете использовать sprintf:

char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);

Ответ 5

См. также boost:: format:

#include <boost/format.hpp>

std::string var = (boost::format("somtext %s sometext %s") % somevar % somevar).str();