繁体   English   中英

如何使用 c++ 解析矢量路径

[英]howto parse a path to a vector using c++

我需要将 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;
}

如果您可以自由使用Boost ,那么解析文件系统路径的最简单方法是使用文件系统库,它具有独立于平台并处理 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 的情况下,选择多种方法中的一种来解析定界字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM