Форматирование строк в C++

Мне нужно собрать строку типа: 'unzip -P 123456 file.zip' из двух string и одного int. Мой код:

#include <iostream>
using namespace std;

int main () {
    string out;
    string s1 = "unzip -P ";
    string s2 = " file.zip";
    int pass = 123456;
    out = s1 << to_string(pass) << s2;
    cout << out << endl;
    return 0;
};

При компиляции происходят две ошибки:

/usr/include/c++/9/ostream:691:5: ошибка: нет имени типа «type» в «struct std::enable_if<false, void>»

myfile.cpp:9:14: ошибка: no match for «operator<<» (operand types are «std::string» {aka «std::__cxx11::basic_string<char>»} and «std::string» {aka «std::__cxx11::basic_string<char>»})

Почему так происходит? Я неправильно складываю строки? Есть другой способ? Заранее спасибо!


Ответы (2 шт):

Автор решения: David

Ваш код:

#include <iostream>
using namespace std;

int main () {
    string out;
    string s1 = "unzip -P ";
    string s2 = " file.zip";
    int pass = 123456;
    out = s1 << to_string(pass) << s2;
    cout << out << endl;
    return 0;
};

Исправленный код:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string out;
    string s1 = "unzip -P ";
    string s2 = " file.zip";
    int pass = 123456;
    out = s1 + to_string(pass) + s2;
    cout << out << endl;
    return 0;
};

Ошибки: 1. Вы не подключили библиотеку <string>. Она предназначена для работы со строками в C++.

  1. В этой строке out = s1 << to_string(pass) << s2; вы используете неверный оператор <<, тогда как необходимо использовать '+'
→ Ссылка
Автор решения: Рамзес Жданов

Вариант №1

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string out;
    string s1 = "unzip -P ";
    string s2 = " file.zip";
    int pass = 123456;
    out = s1 + to_string(pass) + s2;
    cout << out << endl;
    return 0;
}

Вариант №2

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    string out;
    stringstream ss;
    int pass = 123456;

    string s1 = "unzip -P ";
    string s2 = " file.zip";


    ss << s1 << to_string(pass) << s2;
    out = ss.str().c_str();

    cout << out << endl;
    return 0;
}

Вариант 3

#include <iostream>
#include <string>
using namespace std;

int main()
{

    int pass = 123456;
    string s1 = "unzip -P";
    string s2 = "file.zip";

    char buff[100];

    sprintf_s(buff, sizeof(buff), "%s %d %s", s1.c_str(), pass, s2.c_str());

    string out = buff;

    cout << out << endl;

    return 0;
}
→ Ссылка