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"
?
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());
}
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.
void stripExtension(std::string &path)
{
int dot = path.rfind(".gz");
if (dot != std::string::npos)
{
path.resize(dot);
}
}