Вопрос по c++, string – C ++ создать строку текста и переменных

33

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

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

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

Псевдо

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

Спасибо!

std::string var = std::string("sometext") + somevar + "sometext" + somevar; David Schwartz
если это синтаксическая ошибка, вы должны опубликовать фактический код, тогда мы можем сказать, что вам нужна синтаксическая ошибка (и почему она неправильная), и вы узнаете больше, чем если бы мы просто дали вам правильный синтаксис. twain249
как@yury's solution shows you can also use printf style API сboost::format. Trevor Boyd Smith

Ваш Ответ

5   ответов
48

#include <string>
#include <sstream>

std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();
Error: User Rate Limit Exceeded Jack Farrow
ss.str()Error: User Rate Limit Exceededstringstream.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Jack Farrow
18

станд :: to_string:

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);  
21
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;
Error: User Rate Limit ExceededsomevarError: User Rate Limit ExceededintError: User Rate Limit ExceededstringstreamError: User Rate Limit Exceeded
Error: User Rate Limit ExceededtypeError: User Rate Limit ExceededsomevarError: User Rate Limit Exceededoperator +(*type*)Error: User Rate Limit Exceeded
2

char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);
snprintf()Error: User Rate Limit Exceededsnprintf(str, 1024, "somtext %s sometext %s", somevar, somevar);
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededtooError: User Rate Limit Exceeded
3

повышение :: формат:

#include <boost/format.hpp>

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

Похожие вопросы