Как убрать расширение файла из строки
Есть строка std::string path1 = "/home/igor/tmp.123.zip"
Нужно программно превратить ее в строку /home/igor/tmp.123
При этом алгоритм не должен трогать строки типа std::string path2 = "/home/igor/tmp.123"
Расширение файла задано в const std::string tail = ".zip";
Как сделать это максимально быстро?
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Убедиться, что конец строки совпадает с требуемым расширением, если да - убрать его.
Примерно так -
if (path1.size() < tail.size()) return;
if (path1.substr(path1.size()-tail.size(),tail.size())==tail)
{
path1.erase(path1.size()-tail.size(),tail.size());
}
Если С++20 доступен - то можно проверить окончание с помощью ends_with().
Еще вариант - использовать path из <filesystem>, но по сути то же самое...
string path1 = "/home/igor/tmp.123.zip";
string tail = ".zip";
filesystem::path path2 = path1;
if (path2.extension() == tail)
path2.replace_extension();
cout << path2;
Автор решения: Yakov
→ Ссылка
int main()
{
std::string hello = "/home/igor/tmp.123.zip";
const std::string tail = ".zip";
size_t offset = hello.find_last_of(tail);
if(offset != std::string::npos && offset == hello.length()-1)
hello.erase(offset-tail.length()+1, tail.length());
return 0;
}