-2

プログラムで特定の 1 行 (47 番) を使用するだけでよいため、サイトのソース コードをベクターに保存しようとしています。ソース コードのすべての行が新しいベクター要素です。これを行う方法はありますか?

4

1 に答える 1

1

URL からデータを読み込みます。cURL の使用:

std::vector<char> LoadFromUrl(const std::string& url)
{
    struct Content
    {
        std::vector<char> data;

        static size_t Write(char * data, size_t size, size_t nmemb, void * p)
        {
            return static_cast<Content*>(p)->WriteImpl(data, size, nmemb);
        }

        size_t WriteImpl(char* ptr, size_t size, size_t nmemb)
        {
            data.insert(end(data), ptr, ptr + size * nmemb);
            return size * nmemb;
        }
    };

    Content content;

    CURL* curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &Content::Write);
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    curl_easy_perform(curl);

    content.data.push_back('\0');

    return content.data;
}

strtok または boost tokenizer または独自の実装を使用してデータをトークン化します。

std::vector<std::string> LoadLines(const std::string& url)
{
    std::vector<char> content = LoadFromUrl(url);

    std::vector<std::string> lines;
    for(char* token = strtok(&content.front(), "\n");
        token; token = strtok(0, "\n"))
    {
        lines.push_back(std::string(token));
    }
    return lines;
}

int main()
{
    std::vector<std::string> lines = LoadLines(
        "http://stackoverflow.com/questions/10773009/save-sites-source-code-to-vectorstring");

    std::copy(begin(lines), end(lines), std::ostream_iterator<std::string>(std::cout, "\n"));
}
于 2012-05-27T11:06:51.400 に答える