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