[英]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.