web-dev-qa-db-ja.com

文字列から特定の部分文字列を削除する方法は?

私のC++プログラムでは、文字列があります

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

ここで、.gz拡張子(ファイル名が何であれ)をチェックして"/usr/file"のように分割するスクリプトを作成する方法を教えてください。

16
John

どうですか:

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

シンボルの削除には erase を使用できます。

str.erase(start_position_to_erase, number_of_symbols);

そして find を使用して開始位置を見つけることができます:

start_position_to_erase = str.find("smth-to-delete");
47
Aligus

C++ 11を使用できる場合は#include <regex>を使用できます。C++ 03を使用する場合は、Boost.Regex(またはPCRE)を使用して適切な正規表現を作成し、必要なファイル名の部分。別のアプローチは、パスを適切に解析するためにBoost.Filesystemを使用することです。

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