Вам необходимо создать новый объект std::string
или строку байтов с нулевым символом в конце.Один простой способ заключается в следующем:
std::string append_number(std::string const& x, unsigned int num, char sep = '_') {
std::stringstream s;
s << strip_extension(x) << sep << num;
return s.str();
}
Вы можете без проблем передать строковый литерал в вышеприведенную функцию.
Обновление: я заметил, что вам, вероятно, также необходимо удалить расширение:
std::string strip_extension(std::string x, char ext_sep = '.') {
return x.substr(0, x.find_last_of(ext_sep));
}
std::string get_extension(std::string const& x, char ext_sep = '.') {
return x.substr(x.find_last_of(ext_sep) + 1); // no error checking
}
См. Обновленное определение append_number
.
Обновление 2: Попробуйте следующую программу:
#include <string>
#include <iostream>
#include <sstream>
std::string strip_extension(std::string const& x, char ext_sep = '.') {
return x.substr(0, x.find_last_of(ext_sep));
}
std::string append_number(std::string const& x, unsigned int num, char sep = '_') {
std::stringstream s;
s << strip_extension(x) << sep << num << '.' << get_extension(x);
return s.str();
}
int main() {
std::cout << append_number("file.hex", 45) << std::endl;
}
Вывод должен быть:
file_45.hex