知道一个istream是否以C++中的字符串开头的习惯方法?

use*_*866 1 c++ algorithm stl istream

假设您有两个字符串,并且您想知道一个字符串是否是另一个字符串的前缀.这是在C++中实现它的一种方法:

std::string s = ...;
std::string prefix = ...;
bool sStartsWithPrefix = std::equal(prefix.begin(), prefix.end(), s.begin());
Run Code Online (Sandbox Code Playgroud)

但是假设s您没有输入流而是:

std::istream& inputStream = ...;
std::string prefix = ...;
bool inputStreamStartsWithPrefix = ?
Run Code Online (Sandbox Code Playgroud)

当然,我们可以inputStreamStartsWithPrefix通过编写for循环来计算.但是如何以惯用方式(没有for循环,使用算法)?

Nat*_*ica 5

你可以std::istream_iterator结合std::equal喜欢使用

std::istringstream is("foobar");
std::string prefix = "foo";
bool inputStreamStartsWithPrefix = std::equal(prefix.begin(), prefix.end(), std::istream_iterator<char>(is));
Run Code Online (Sandbox Code Playgroud)