Форматирование строк в 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++.
- В этой строке 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;
}