我正在尝试从文件中读取一堆单词,并将它们分类为什么样的单词(名词,形容词,动词等)。例如:
-Nouns;
zyrian
zymurgy
zymosis
zymometer
zymolysis
-Verbs_participle;
zoom in
zoom along
zoom
zonk out
zone
我正在使用getline
读取直到分隔符';'但是我怎么知道什么时候读类型和什么时候读单词呢?
下面的功能在“-名词”之后停止。
int main()
{
map<string,string> data_base;
ifstream source ;
source.open("partitioned_data.txt");
char type [MAX];
char word [MAX];
if(source) //check to make sure we have opened the file
{
source.getline(type,MAX,';');
while( source && !source.eof())//make sure we're not at the end of file
{
source.getline(word,MAX);
cout<<type<<endl;
cout<<word<<endl;
source.getline(type,MAX,';');//read the next line
}
}
source.close();
source.clear();
return 0;
}
答案 0 :(得分:0)
我不确定您输入文件的格式。但是您似乎有一个带有行的文件,其中的项目之间用分号分隔。
阅读此书的方法应有所不同。
请参见以下示例:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
std::istringstream source{R"(noun;tree
noun;house
verb;build
verb;plant
)"};
int main()
{
std::string type{};
std::string word{};
//ifstream source{"partitioned_data.txt"};
if(source) //check to make sure we have opened the file
{
std::string line{};
while(getline(source,line))//make sure we're not at the end of file
{
size_t pos = line.find(';');
if (pos != std::string::npos) {
type = line.substr(0,pos);
word = line.substr(pos+1);
}
std::cout << type << " --> " << word << '\n';
}
}
return 0;
}
std::ifstream
的析构函数将为我们做到这一点。char type [MAX];
之类的C样式数组在while语句中读取一行,并在while中检查操作的有效性。然后,在读取行上工作。
搜索“;”在字符串中,然后找到子字符串。
如果我想知道输入文件的格式,那么我会为你写一个更好的例子。
由于我没有SO上的文件,因此我改用std::istringstream
。但是与文件相比没有任何区别。只需删除源代码中的std::istringstream
并取消注释ifstream定义。