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