19

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

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

.gzここで、拡張機能(ファイル名が何であれ)をチェックするスクリプトを作成し、次のように分割する方法は"/usr/file"

4

4 に答える 4

58

シンボルを削除するために消去を使用できます。

str.erase(start_position_to_erase, number_of_symbols);

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

start_position_to_erase = str.find("smth-to-delete");
于 2012-05-10T10:48:51.810 に答える
12

どうですか:

// 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());
}
于 2012-05-10T10:54:38.473 に答える
3

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

于 2012-05-10T10:56:48.407 に答える
0
void stripExtension(std::string &path)
{
    int dot = path.rfind(".gz");
    if (dot != std::string::npos)
    {
        path.resize(dot);
    }
}
于 2017-07-01T13:54:31.347 に答える