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 回答