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

how to remove a substring of unknown length from a string - C++

我有一个字符串 (URL),我知道其中的一部分,但不是全部。我想删除一些字符串,但字符串的长度可能会有所不同,所以我无法使用 <string> 中的 erase() 函数。

一个示例 URL 我可能会使用: https://github.com/username/repo-name

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

我知道我可以在 shell 中使用 sed 命令轻松完成此操作:

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

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

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

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

之类的东西

编辑

我解析的所有URLs都是GitHub URLs,所以它们都将与此类似,这将进入的程序的另一部分将确保它们都是遵循同样的语法。

使用 rfind 获取最后一个斜杠的位置,然后 substr 到 return 字符串的右侧。由于 substr 的第二个参数默认为 "the end of the string" 你只需要提供开始位置:

#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) 所以如果字符串中存在这些参数,这显然不是你想要的,但它会让你走上正轨.