【问题标题】:how to remove a substring of unknown length from a string - C++ [closed]如何从字符串中删除未知长度的子字符串 - C++ [关闭]
【发布时间】:2019-12-24 05:24:28
【问题描述】:

我有一个字符串 (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() 之类的东西。

编辑

我正在解析的所有 URL 都是 GitHub URL,因此它们都将与此类似,将进入的程序的另一部分将确保它们都遵循相同的语法。

【问题讨论】:

  • 打开你的 C++ 书籍到解释你可以用 std::string 做什么的那一章,并阅读rfind 方法做什么的描述。
  • 我没有 C++ 书籍,但我会查一下。谢谢。
  • c++sed 是一对奇怪的标签。

标签: c++ string sed stdstring


【解决方案1】:

使用rfind 获取最后一个斜杠的位置,然后使用substr 返回字符串的右侧。由于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),因此如果字符串中存在这些参数,这显然不是您想要的,但它会让您走上正确的轨道。

【讨论】:

  • 效果很好!谢谢!
猜你喜欢
  • 2013-06-17
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2011-10-15
  • 2021-12-25
  • 2014-08-17
相关资源
最近更新 更多