2014-01-08 17 views
2

我在「std::vector<char>」容器中存儲了混合二進制(即圖像)和一些人類可讀數據(即HTTP標頭)。 (數據由分離 「CRLFCRLF(\ r \ n \ r \ n)的」 指標)如何在「std :: vector <char>」容器中找到單個單詞

任何人都可以提出如何找到的「一個開始位置\ r \ n \ r \ n中的方法「」容器中的「」?

使用STL庫可以執行類似「std::size_t pos = data.find("\r\n\r\n");(其中數據是」std::vector<char>「)」嗎?

謝謝。

回答

5

您不需要將要查找的模式放入容器中。一個C字符串就夠了。

std::vector<char> v = ....; 
const char *crlf2 = "\r\n\r\n"; 
auto it = std::search(v.begin(), v.end(), crlf2, crlf2 + strlen(crlf2)); 

無論如何,在此之後,it將包含一個迭代到載體v其中該圖案開始(或v.end()如果沒有找到該模式)。

您可以轉換成一個索引與std::distance(v.begin(), it)或只是it - v.begin()

5

您可以使用std::search搜索感興趣的字符序列的第一個匹配項。您必須將該序列放置在數組或容器中。

std::vector<char> v = ....; 
std::vector<char> start{'\r', '\n', '\r', '\n'}; 
auto it = std::search(v.begin(), v.end(), start.begin(), start.end()); 
+0

這也將是可能將序列中的字符串,這當然是另一種字符容器。 – daramarak

相關問題