2012-05-27 44 views
-2

我試圖挽救網站的源代碼,以向量,其中的源代碼的每一行是一個新的向量元素,因爲我只需要在我的程序使用一個特定行(編號47) 。任何想法如何做到這一點?保存網站的源代碼,以矢量<string>

+2

爲什麼存儲整個事情,如果你已經知道你需要的行號。 –

+0

@RedSerpent有沒有辦法在字符串中只保存一行? –

+0

@LuchianGrigore我並不真正熟悉嫋嫋,沒有一個主意,找 –

回答

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或提高標記生成器或您自己的實現數據:

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")); 
}