我有std::string这样的:
std::string fileName;
Run Code Online (Sandbox Code Playgroud)
其中,fileName就像/tmp/fs////js//config.js
它是从什么地方来,我需要将它存储.但是当我存储它时,我需要从路径中删除额外的'/'字符,基本上只需要一个目录名和文件名之间的分隔符.
我可以通过一次迭代字符串一个char并与下一个char进行比较来删除它们,但它不是非常有效.
谁能建议一些有效的方法来做到这一点?
删除重复的相邻元素是一项工作std::unique.在这种情况下,你需要提供自己的谓词,但它是O(n)而且很简单.
struct both_slashes {
bool operator()(char a, char b) const {
return a == '/' && b == '/';
}
};
std::string path("/tmp/fs////js//config.js");
path.erase(std::unique(path.begin(), path.end(), both_slashes()), path.end());
Run Code Online (Sandbox Code Playgroud)
你不会找到比这更有效的东西 - 想一想 - 你需要删除连续的重复字符 - 即使在最好的情况下,你也必须至少看一次每个角色.