c++中非常具体的解析
Very specific parsing in C++
基本上,我试图从文件中读取单词,并且没有标点符号,将每个单词读取到multimap中,然后将其插入到矢量中,每对都是一个单词和找到该单词的文件行。我已经得到了删除标点符号的功能,我很确定我的插入代码工作正常,但我似乎无法绕过行号部分。我将这部分代码包含如下:
ifstream in("textfile.txt");
string line;
string keys;
stringstream keystream;
int line_number = 1;
while (getline(in, line, 'n')) {
alphanum(line);
keystream << line;
while(getline(keystream, keys, ' '))
table.insert(keys, line_number); //this just inserts the pair into my vector (table is an instance of a class I created)
keystream.str("");
line_number++;
}
这个问题似乎与stringstream
有关。当我用keystream.str("")
时,它似乎不清晰。这种特殊的方法似乎只读取第1行,然后退出循环,而我尝试过的其他一些变化(我记不清我到底做了什么)读取整个文件,但不刷新stringstream
,所以它读起来像单词1,单词1,单词2,单词1,单词2,单词3等。无论如何,如果有人能给我指出正确的方向,或者链接到一个特定的c++输入解析指南,那将是非常感激的!谢谢!
不要保留string stream对象;每轮新建一个:
string line;
while (getline(in, line, 'n'))
{
alphanum(line);
istringstream keystream(line);
string keys;
while (getline(keystream, keys, ' ')) // or even "while (keystream >> keys)"
{
}
}
我认为问题在于第二个getline()循环在stringstream上设置了EOF标志,当您调用str()时,这不会被清除。
相关文章:
- OpenGL大的3D纹理(>2GB)非常慢
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 使用浮点数和双精度数的非常小数字的数学
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 我从int x[3]得到的一个非常奇怪的输出;
- 反向迭代器在C++中非常奇怪的行为
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 我的自定义使用 std::unordered_map 的性能非常慢
- ifstream 尝试读取 9 到 13 之间的无符号字符时非常奇怪的行为
- 一个非常简单的win32套接字代码,但工作错误
- 非常快速地阅读 CSV 文件
- max_element() 给出非常奇怪的错误消息
- 将 mmap 内存用于开销非常低的循环缓冲区
- 内存映射文件访问非常慢
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- QtWebengine 5.7.1的性能非常慢
- 如何非常快速地将数字添加到 Vector 中的一系列元素中
- 我在运行函数 GetVolumeInformation() 时得到非常随机的结果