0

RESTWebサービスの一部として「ルーター」のURLのパス部分を解析する必要があります。HTTPリクエストの処理にPIONライブラリを使用しています。このライブラリには、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を自由に使用できる場合、ファイルシステムパスを解析する最も簡単な方法は、ファイルシステムライブラリを使用することです。これには、プラットフォームに依存せず、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を使用しない場合は、区切られた文字列を解析する多くの方法の1つを選択してください。

于 2012-04-11T03:01:54.693 に答える