如何使用c ++解析向量的路径

时间:2012-04-11 02:55:01

标签: c++ parsing vector path

我需要解析“路由器”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;
}

1 个答案:

答案 0 :(得分:2)

如果您可以自由使用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"

要遍历路径的每个元素,您可以使用path iterator

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

打印

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

如果没有Boost,请选择one of the many ways to parse a delimited string