0

我需要将“路由器”的 URL 的路径部分解析为 REST Web 服务的一部分。我正在使用 PION 库来处理 HTTP 请求。这个库似乎没有任何检索部分 URL 路径的功能——至少看起来是这样。我找不到另一个这样做的图书馆。例如, http://www.w3.org/Library/src/HTParse.c没有给出部分路径。

有没有更快,更强大的方法来做到这一点:

std::vector<std::string> parsePath(std::string path)
{
    std::string delimiter = "/";
    std::string part = "";
    std::size_t firstPos = 0;
    std::size_t secondPos = 0;
    std::vector<std::string> parts;

    while (firstPos != std::string::npos)
    {
        firstPos = path.find(delimiter, firstPos);
        secondPos = path.find(delimiter, firstPos + 1);
        part = path.substr(firstPos + 1, (secondPos - 1) - firstPos);
        if (part != "") parts.push_back(part);
        firstPos = secondPos;
    }

    return parts;
}
4

1 回答 1

3

如果您可以自由使用Boost,解析文件系统路径的最简单方法是使用filesystem library,它具有独立于平台和处理 POSIX 和 Windows 路径变体的优点:

boost::filesystem::path p1("/usr/local/bin");
boost::filesystem::path p2("c:\\");
std::cout << p1.filename() << std::endl; // prints "bin"
std::cout << p1.parent_path() << std::endl; // prints "/usr/local"

要遍历路径的每个元素,可以使用路径迭代器

for (auto const& element : p1)
    std::cout << element << std::endl;

印刷

"/"
"usr"
"local"
"bin"

如果没有 Boost,请选择解析分隔字符串的多种方法之一

于 2012-04-11T03:01:54.693 回答