c++ - 知道 istream 是否以 C++ 中的字符串开头的惯用方法?

标签 c++ algorithm stl istream

假设你有两个字符串,你想知道一个是否是另一个的前缀。这是在 C++ 中执行此操作的一种方法:

std::string s = ...;
std::string prefix = ...;
bool sStartsWithPrefix = std::equal(prefix.begin(), prefix.end(), s.begin());

但是假设您有一个输入流而不是 s:

std::istream& inputStream = ...;
std::string prefix = ...;
bool inputStreamStartsWithPrefix = ?

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

最佳答案

您可以使用 std::istream_iterator结合 std::equal like

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

关于c++ - 知道 istream 是否以 C++ 中的字符串开头的惯用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31947831/

相关文章:

c++ - C++ 中字符串流与文件 I/O 流的性能对比

c++ - 使用 Boost.PropertyTree 解析 JSON 数组

javascript - 从 Javascript 中的数组值生成有效输出

c++ - myVector.erase(myPtr) 是否删除 myPtr 指向的对象?

c++ - std::reference_wrapper 的实现

c++ - 使用其他c++编译器编译CUDA代码

r - 生成包含 n 个元素的所有 k-排列的矩阵的好算法?

java - 试图弄清楚经典的背包重现

c++ - STL 容器要求

C++容器按键和值搜索