在我的C ++程序中,我有字符串
string s = "/usr/file.gz";
在这里,如何让脚本检查.gz
扩展(无论文件名是什么)并将其拆分为"/usr/file"
?
答案 0 :(得分:39)
您可以使用erase删除符号:
str.erase(start_position_to_erase, number_of_symbols);
您可以使用find查找起始位置:
start_position_to_erase = str.find("smth-to-delete");
答案 1 :(得分:8)
怎么样:
// 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());
}
答案 2 :(得分:2)
如果你能够使用C ++ 11,你可以使用#include <regex>
,或者如果你坚持使用C ++ 03,你可以使用Boost.Regex(或PCRE)来形成一个正确的正则表达式打破你想要的文件名部分。另一种方法是使用Boost.Filesystem正确解析路径。
答案 3 :(得分:0)
void stripExtension(std::string &path)
{
int dot = path.rfind(".gz");
if (dot != std::string::npos)
{
path.resize(dot);
}
}