如何从字符串中删除未知长度的子字符串 - 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
) 所以如果字符串中存在这些参数,这显然不是你想要的,但它会让你走上正轨.
我有一个字符串 (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
) 所以如果字符串中存在这些参数,这显然不是你想要的,但它会让你走上正轨.