c++ - 在 C++ 中出现字符之间/之后打印所有子字符串
问题描述
我试图在某个字符出现之间或之后获取所有子字符串。特别是搜索查询网址(获取选项),例如,如果我有:
std::string url = "https://www.google.com/search?q=i+need+help&rlz=1C1CHBF_enUS851US851&oq=i+need+help&aqs=chrome.0.69i59j0l3j69i60l2.4646j0j7&sourceid=chrome&ie=UTF-8"
我需要在“&”字符之间和之后(最后一次出现)输出字符串,因此输出将是:
rlz=1C1CHBF_enUS851US851
oq=i+need+help
aqs=chrome.0.69i59j0l3j69i60l2.4646j0j7
sourceid=chrome
ie=UTF-8
我了解如何使用一个字符串来执行此操作,但我一直试图将其实现为一个循环。这必须通过几个不同长度和选项数量的 url 来完成。
到目前为止,我只能在第一次和第二次出现字符之间抓取一个子字符串,但我需要在任何给定的 url 中抓取所有子字符串。
int a = url.find("&") + 1;
int b = url.find("&", url.find("&") + 1);
int c = (b - a);
std::string option = url.substr(a, c);
解决方案
只需&
在循环中从前一个元素中找到下一个元素,如果找不到&
更多元素,则退出循环并处理第一个元素:
vector<string> foo(const string& url)
{
vector<string> result;
auto a = url.find("?");
if (a == string::npos) return result;
auto b = url.find("&");
if (b == string::npos)
{
result.push_back(url.substr(a + 1, string::npos));
return result;
}
result.push_back(url.substr(a + 1, b - a - 1));
do
{
a = b;
b = url.find("&", a + 1);
result.push_back(url.substr(a + 1, b - a - 1));
} while (b != string::npos);
return result;
}
适用于您的示例:https ://ideone.com/SiRZQB
推荐阅读
- mongodb - 根据条件查找和计算 mongo 数组中的重合
- vba - Excel VBA 运行时错误 9,但在单步执行代码时没有
- android - 使用中间 CA 的 Android 信任证书
- c# - 使用 VSCode 在调试会话中间移动断点
- php - 带有翻译和碳的 Laravel 数据表 - 第一行默认语言问题
- git - 当我的本地不是最新的时,如何从远程拉取?
- vue.js - 如何卸载 vue-cli 2.xx
- internationalization - 免费在线服务从不同国家发送短信
- xaml - 如何在 xaml 中居中网格列标题?
- csv - 如何从 JMeter 中的 CSV 文件替换 GET 路径变量?