Давайте использовать пример, который вы дали: https://www.google.com/search?q=some+query&oq=some+query&aqs=chrome..69i57j0l5.2991j0j9&sourceid=chrome&ie=UTF-8
Общая идея здесь - разделить строку на основе определенных разделителей. В этом случае различные разделы фактического URL-адреса разделяются на основе «/». Если мы разделим строку на основе этого, мы получим это:
- https:
- www.google.com
- search? Q = some + query & oq = some + query & aqs = chrome .. 69i57j0l5.2991j0j9 & sourceid = chrome & ie = UTF-8
Третий раздел можно разделить далее на основе "&", чтобы получить:
- поиск? q = some + query
- oq = some + query
- aqs = chrome .. 69i57j0l5.2991j0j9
- sourceid = chrome
- т.е. = UTF-8
Затем вы можете разделить каждый из них на "=", чтобы получить имя опции и выбранное значение. Например, «sourceid = chrome» будет разделен, чтобы дать имя опции «sourceid» и значение «chrome».
Реализовано в реальном коде C ++ это выглядит так:
// Includes
#include <iostream>
#include <vector>
// For simplicity's sake, we'll call std::vector<std::string> "Tokens"
using Tokens = std::vector<std::string>;
// Create a function to return an std::vector<std::string>
Tokens getTokens(std::string inputString, std::string delimiter)
{
// Create a list of tokens
Tokens tokens;
// Create a string to store the curernt token
std::string token;
// Iterate through until there are no more delimiters (at which our token will be identical to our input string)
while (token != inputString)
{
// Set the token to the section of the input string from its beginning to where the first delimiter is found
token = inputString.substr(0, inputString.find(delimiter));
// If that token isn't empty append it to the list of tokens (we could get any empty token if two delimiters follow one another, e.g. //)
if (token != "")
{
tokens.push_back(token);
}
// Remove the token from the original input string
inputString = inputString.substr(inputString.find(delimiter) + 1);
}
return tokens;
}
int main()
{
// This is our URL:
std::string URL = "https://www.google.com/search?q=some+query&oq=some+query&aqs=chrome..69i57j0l5.2991j0j9&sourceid=chrome&ie=UTF-8";
// Split up the URL into tokens based on the delimiter "/"
Tokens URL_tokens = getTokens(URL, "/"); // <--- should contain three tokens, "https:", "www.google.com" and everything after that
// Split up the third token of the URL tokens based on the delimiter "&"
Tokens details_tokens = getTokens(URL_tokens[2], "&");
// Print out the tokens
std::cout << URL_tokens[0] << "\n";
std::cout << URL_tokens[1] << "\n\n";
for (int token = 0; token < details_tokens.size(); token++)
{
// Split into option and value
Tokens option_and_value = getTokens(details_tokens[token], "=");
std::cout << "Option: " << option_and_value[0] << "\n";
std::cout << "Value: " << option_and_value[1] << "\n\n";
}
}
На моем компьютере это выдает следующий вывод:
https:
www.google.com
Option: search?q
Value: some+query
Option: oq
Value: some+query
Option: aqs
Value: chrome..69i57j0l5.2991j0j9
Option: sourceid
Value: chrome
Option: ie
Value: UTF-8