我正在参加自定义 C++ 速成类。我已经了解基础知识很多年了,但我目前正在努力刷新内存并了解更多信息。为此,作为我的第二个任务(在编写基于链表的堆栈类之后),我正在编写自己的字符串类。
到现在为止还算顺利;我想重载 operator>> 以便我可以执行诸如 cin >> my_string; 之类的操作。 问题是我不知道如何正确读取 istream(或者问题可能是我不知道流......)。我尝试了一段时间 (!stream.eof()) 循环 .read()s 一次 128 个字节,但正如人们所料,它仅在 EOF 处停止。我希望它读到一个换行符,就像你用 cin >> 读到一个 std::string 一样。
我的字符串类有一个 alloc(size_t new_size) 函数可以(重新)分配内存,还有一个 append(const char *) 函数可以完成这部分工作,但我显然需要先知道要分配的内存量写入缓冲区。
关于如何实现这个的任何建议?我尝试使用 seekg() 和 tellg() 获取 istream 长度,但无济于事(它返回 -1),正如我所说的循环直到 EOF(不在换行处停止读取)一次读取一个 block 。
最佳答案
要从流中读取字符直到行尾,请使用循环。
char c;
while(istr.get(c) && c != '\n')
{
// Apped 'c' to the end of your string.
}
// If you want to put the '\n' back onto the stream
// use istr.unget(c) here
// But I think its safe to say that dropping the '\n' is fine.
如果空间不足,请重新分配更大的缓冲区。 复制数据并继续。无需花哨的学习项目。
关于c++ - 将运算符>>重载到 C++ 中的字符缓冲区 - 我可以告诉流长度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686385/