-2

我正在尝试将站点的源代码保存到向量中,其中每一行源代码都是一个新的向量元素,因为我只需要在我的程序中使用一个特定的行(编号 47)。知道怎么做吗?

4

1 回答 1

1

从 URL 加载数据。使用卷曲:

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 回答