W moim programie C++, mam ciągJak usunąć konkretny podciąg z łańcucha?
string s = "/usr/file.gz";
Oto, jak zrobić skrypt, aby sprawdzić .gz przedłużeniem (niezależnie od nazwy pliku) i podzielony jest jak "/usr/file"
?
W moim programie C++, mam ciągJak usunąć konkretny podciąg z łańcucha?
string s = "/usr/file.gz";
Oto, jak zrobić skrypt, aby sprawdzić .gz przedłużeniem (niezależnie od nazwy pliku) i podzielony jest jak "/usr/file"
?
Jak o:
// 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());
}
Najpierw sprawdź 's.size()> = 3'. –
substr() zawsze tworzy nowy obiekt. To nie brzmi dobrze ze względu na wydajność. – Alexander
@Alexander: To prawda, ale w pytaniu nie było wzmianki o rozważaniach dotyczących wydajności. –
Jeśli jesteś możliwość używania C++ 11, możesz użyć #include <regex>
lub jeśli utkniesz w C++ 0 3 można użyć Boost.Regex (lub PCRE), aby utworzyć prawidłowe wyrażenie regularne, aby wydzielić części nazwy pliku, który chcesz. Innym podejściem jest użycie Boost.Filesystem do prawidłowego analizowania ścieżek.
regex powinien być przesadą dla tak prostego zadania – 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;
}
Czy mógłbyś wyjaśnić, co robi kod? Wtedy jest jeszcze bardziej użyteczny dla innych, którzy natkną się na ten problem później. – 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
możliwe duplikat [Znajdź jeśli ciąg endswith innym ciągiem w C++] (http://stackoverflow.com/questions/874134/find -if-string-endswith-in-string-in-c) –
@Vlad powinieneś zamknąć głosowanie, zamiast łączenia –