读取 iostream,直到找到字符串分隔符
Reading a iostream until a string delimiter is found
我目前有一个函数,可以从流中读取,直到找到预定义的流阻止器。我目前可以启动并运行它的唯一方法是使用 std::getline 并让一个字符后跟一个换行符(在我的情况下是 char(3)
)作为我的流阻止器。
std::string readuntil(std::istream& in) {
std::string text;
std::getline(in, text, char(3));
return text;
}
有没有办法实现相同的效果,但使用更大的字符串作为我的流阻止器?我不介意它后面必须跟一个换行符,但我希望我的分隔符是一定大小的随机字符串,以便它因流中的更改而发生的概率非常低。
知道如何实现这一目标吗?
我假设你的要求是:
- 将 istream 引用和字符串作为参数的函数
- 字符串是一个分隔符,函数必须返回一个字符串,其中包含在其之前到达的所有字符
- 流必须紧跟在分隔符之后,以便进一步处理。
AFAIK,C++ 和 C 标准库都不包含该功能。我只想:
- 读取到临时字符串中分隔符的最后一个字符
- 将其累积在全局字符串中
- 如果全局字符串不以分隔符结尾,则迭代上述 2 个操作
- (可选)从全局字符串的末尾删除分隔符
- 返回全局字符串
可能的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
}
相关文章:
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 字符串开头的分隔符
- 尝试将 c 字符串数组与分隔符连接起来
- 根据新的行分隔符从字符串中删除子字符串
- 同一分隔符之间的多个子字符串
- 字符串流分隔符
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- C++获取两个分隔符之间的字符串并替换它
- 是否存在像C++中那样带有分隔符的C#原始字符串
- 如何从字符串开头到第二个分隔符中提取子字符串?
- 如何使用两个不同的分隔符拆分字符串
- 将子字符串提取到最后 n 个分隔符C++
- 基于 C++ 中的多个字符串分隔符拆分字符串
- 使用 boost::split 按分隔符的前 N 次匹配来拆分字符串
- 使用分隔符空格解析字符串,但字符串也包含空格
- 获取具有同一分隔符的多个实例的字符串的子字符串
- 具有两个分隔符的字符串流
- 子字符串和分隔符
- 将具有分隔符的字符串拆分为 3 个变量
- C++ 获取两个分隔符字符串之间的字符串