我目前有一个从流中读取的函数,直到找到预定义的流停止器。我目前可以启动并运行它的唯一方法是使用 std::getline 并让一个字符后跟一个换行符(在我的情况下char(3))作为我的流停止器。
std::string readuntil(std::istream& in) {
std::string text;
std::getline(in, text, char(3));
return text;
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以实现相同的但使用更大的字符串作为我的流停止器?我不介意它后面必须跟一个换行符,但我希望我的分隔符是某个大小的随机字符串,这样它在流中的变化发生的概率非常低。
知道如何实现这一目标吗?
我假设您的要求是:
AFAIK,C++ 和 C 标准库都没有包含一个函数。我只想:
一个可能的 C++ 实现是:
std::string readuntil(std::istream& in, std::string delimiter) {
std::string cr;
char delim = *(delimiter.rbegin());
size_t sz = delimiter.size(), tot;
do {
std::string temp;
std::getline(in, temp, delim);
cr += temp + delim;
tot = cr.size();
} while ((tot < sz) || (cr.substr(tot - sz, sz) != delimiter));
return cr.substr(0, tot - sz); // or return cr; if you want to keep the delimiter
}
Run Code Online (Sandbox Code Playgroud)