代码之家  ›  专栏  ›  技术社区  ›  Batcastle

如何从字符串-C++中删除未知长度的子串

  •  -2
  • Batcastle  · 技术社区  · 5 年前

    我有一个字符串(URL),我知道它的一部分,但不是全部。一些我想删除的字符串,但字符串的长度可能会有所不同,因此我不能使用 erase() 函数来自 <string> .

    我可以使用的URL示例: https://github.com/username/repo-name

    解析之后,我想只剩下 repo-name

    我知道我可以很容易地做到这一点 sed 命令:

     echo "https://github.com/username/repo-name" | sed 's/.*\///'
    

    理想情况下,我想要一些可以变成函数的东西,这样我可以做如下的事情:

    string substring = sed("s/.*\///",var);
    

    请记住我会的 知道要删除的完整字符串。对于我显示的URL,我需要前面的所有内容,包括最后的“/”,但是用户名可能会更改。所以据我所知,我不能使用诸如 擦除() rfind() .

    1 回复  |  直到 5 年前
        1
  •  0
  •   Casey    5 年前

    使用 rfind 要获取最后一个斜杠的位置,则 substr 返回字符串的右侧。自从 子串 的第二个参数默认为“字符串的结尾”,您只需提供开始位置:

    #include <string>
    
    std::string GetURLFilePath(const std::string& url) {
        auto last_slash_location = url.rfind('/');
        if(last_slash_location == std::string::npos || last_slash_location + 1 >= url.size()) {
            return "";
        }
        return url.substr(last_slash_location + 1);
    }
    

    你没有说你是否需要参数( https://www.youtube.com/watch?v=YnWhqhNdYyk )所以很明显,如果字符串中存在这些元素,这就不是你想要的,但是它会让你找到正确的方向。