В моей программе C++, у меня есть строкаКак удалить определенную подстроку из строки?
string s = "/usr/file.gz";
Здесь, как сделать скрипт для проверки .gz (независимо расширением имени файла есть) и разделить его как "/usr/file"
?
В моей программе C++, у меня есть строкаКак удалить определенную подстроку из строки?
string s = "/usr/file.gz";
Здесь, как сделать скрипт для проверки .gz (независимо расширением имени файла есть) и разделить его как "/usr/file"
?
Как о:
// Check if the last three characters match the ext.
const std::string ext(".gz");
if (s != ext &&
s.size() > ext.size() &&
s.substr(s.size() - ext.size()) == ".gz")
{
// if so then strip them off
s = s.substr(0, s.size() - ext.size());
}
Сначала проверьте 's.size()> = 3'. –
substr() всегда создает новый объект. По соображениям производительности это звучит не очень хорошо. – Alexander
@ Александр: Верно, но не было упоминания о соображениях производительности в вопросе. –
Если вы умеет использовать C++ 11, вы можете использовать #include <regex>
или если вы застряли с C++ 0 3 вы можете использовать Boost.Regex (или PCRE), чтобы сформировать правильное регулярное выражение, чтобы разбить части требуемого имени файла. Другой подход - использовать Boost.Filesystem для правильной обработки путей.
regex должен быть излишним для такой простой задачи – Vlad
#include <bits/stdc++.h>
using namespace std;
int main()
{
char ch[80], c[80];
int s, d;
cin >> ch >> s >> d;
int k = 0;
int l = strlen(ch);
s= s -1;
d = d + s;
for(int i = 0; i < l; i++)
{
if(i < d){
if(i == s)
{
s++;
continue;
}
}
c[k++] = ch[i];
}
c[k] = '\0';
cout << c;
}
Не могли бы вы объяснить, что делает код? Тогда это еще более полезно для других, которые спотыкаются об этой проблеме позже. – wmk
void stripExtension(std::string &path)
{
int dot = path.rfind(".gz");
if (dot != std::string::npos)
{
path.resize(dot);
}
}
http://stackoverflow.com/a/874160/276994 – Vlad
возможно дубликат [Find, если строка EndsWith другой строки в C++] (http://stackoverflow.com/questions/874134/find -if-string-endswith-another-string-in-c) –
@ Vlad вам следует закрыть голосование, вместо ссылки –