web-dev-qa-db-fra.com

Comment supprimer une sous-chaîne particulière d'une chaîne?

Dans mon programme C++, j'ai une chaîne

string s = "/usr/file.gz";

Ici, comment créer le script pour vérifier l'extension .gz (quel que soit le nom du fichier) et le scinder comme suit: "/usr/file"?

12
John

Que diriez-vous:

// 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());
}
8
Component 10

Vous pouvez utiliser effacer pour supprimer des symboles:

str.erase(start_position_to_erase, number_of_symbols);

Et vous pouvez utiliser find pour trouver la position de départ:

start_position_to_erase = str.find("smth-to-delete");
37
Alexander

Si vous parvenez à utiliser C++ 11, vous pouvez utiliser #include <regex> ou si vous êtes bloqué avec C++ 03, vous pouvez utiliser Boost.Regex (ou PCRE) pour former une expression régulière appropriée afin de séparer les parties d'un objet. nom de fichier que vous voulez. Une autre approche consiste à utiliser Boost.Filesystem pour analyser correctement les chemins.

2
Dean Michael
void stripExtension(std::string &path)
{
    int dot = path.rfind(".gz");
    if (dot != std::string::npos)
    {
        path.resize(dot);
    }
}
0
user8241310