我目前有一个从流中读取的函数,直到找到预定义的流停止符。我目前能够启动并运行的唯一方法是使用std :: getline并使用一个字符后跟换行符(在我的情况下为char(3)
)作为我的流式停止。
std::string readuntil(std::istream& in) {
std::string text;
std::getline(in, text, char(3));
return text;
}
有没有办法达到同样的效果,但是我的流式塞子有一个更大的字符串?我不介意必须跟一个新行,但我希望我的分隔符是一个大小的随机字符串,以便它在流中发生变化的概率非常低。
知道如何实现这个目标吗?
答案 0 :(得分:3)
我认为您的要求是:
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
}