C++ C+中非常具体的语法分析+;
基本上,我试着读入一个文件中的单词,不用标点符号,把每个单词读入一个多重映射,然后插入一个向量,每对都是一个单词,找到单词的文件行。我有删除标点符号的功能,可以很好地工作,而且我相当确定我的插入代码工作正常,但我似乎无法绕过行号部分。我的代码中包含了这一部分,如下所示:C++ C+中非常具体的语法分析+;,c++,parsing,ifstream,stringstream,C++,Parsing,Ifstream,Stringstream,基本上,我试着读入一个文件中的单词,不用标点符号,把每个单词读入一个多重映射,然后插入一个向量,每对都是一个单词,找到单词的文件行。我有删除标点符号的功能,可以很好地工作,而且我相当确定我的插入代码工作正常,但我似乎无法绕过行号部分。我的代码中包含了这一部分,如下所示: ifstream in("textfile.txt"); string line; string keys; stringstream keystream; int line_number = 1; while (getline
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++;
}
ifstream-in(“textfile.txt”);
弦线;
字符串键;
串流键流;
int line_number=1;
while(getline(in,line,'\n')){
alphanum(行);
keystream不要保留字符串流对象;只需在每一轮中创建一个新对象:
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()时,这个标志没有被清除。您还需要在“keystream”上调用.clear()。看起来这两个答案都有效。谢谢大家!我尝试了.clear()我记得几年前有过这个问题,我曾经通过循环的每次迭代重新创建stringstream
,直到我发现可以清除EOF标志。