如何从流中跳过字符直到找到字符串?

时间:2016-11-29 13:49:29

标签: c++

在玩具项目中,我正在实施HTTP解析器。我没有使用C ++的经验。我可以跳到下一个CR,但我想跳过所有标题,这样我的分隔符就是一个由CR LF CR LF(或"\r\n\r\n")组成的字符串。

我现在的代码是:

// Implements a *very* basic HTTP parser
// This parser will choke on valid HTTP Request-Line (GET   /    HTTP/1.0)
std::tuple<std::string, std::string> HttpParser::parse(std::istream& stream)
{
  char buffer[2048];

  // Extract the METHOD from the HTTP Request-Line
  stream.getline(buffer, sizeof(buffer) - 1, ' ');
  std::string method(buffer);

  // Extract URI from HTTP Request-Line
  stream.getline(buffer, sizeof(buffer) - 1, ' ');
  std::string uri(buffer);

  // Skip over rest of headers...
  stream.ignore();

  return std::tuple<std::string, std::string>{method, uri};
}

我找到How to split string using istringstream with other delimiter than whitespace?,但答案使用了一个库,我现在更愿意使用它。我还找到了Reading formatted data with C++'s stream operator >> when data has spaces,但这个答案也会分成单个字符。

此外,find_first_of在第一次出现时停止,而不是完整的分隔符。

我知道我想使用与std::istream::ignore()类似的内容,但ignore()仅接受char作为分隔符。是否有类似的功能可以跳过,直到找到特定的字符串?也许像index_of?

0 个答案:

没有答案