string dictionary;
ifstream in;
in.open("Q3.dic");
while(!in.eof())
{
getline(in, dictionary);
cout << dictionary <<endl;
}
这就是我用来读取如下文本文件的内容:
you vous
today aujourd'hui
good bon
good morning bonjour
afternoon après-midi
good evening bonsoir
much beaucoup
is est
注意:英文短语通过制表符与法语翻译分开。
我要知道的是,是否可以将每列读取为两个不同的变量?
我试过了:
in >> english >> french;
cout << english << french <<endl;
但我遇到的问题是有三个单词的行。
答案 0 :(得分:2)
std::getline()
接受第三个参数 - delim
- 分隔符,如果你为第一个调用指定为'\t'
(tab),你应该得到你想要的结果:< / p>
std::ifstream in("Q3.dic");
for (std::string english, french;
std::getline(in, english, '\t') && std::getline(in, french);
)
{
std::cout << "English: " << english << " - French: " << french
<< std::endl;
}
对于那些包含多个标签的行,您需要trim the string,但我声明这不属于这个问题的范围!
English: you - French: vous
English: today - French: aujourd'hui
English: good - French: bon
English: good morning - French: bonjour
English: afternoon - French: après-midi
English: good evening - French: bonsoir
English: much - French: beaucoup
English: is - French: est
答案 1 :(得分:1)
我认为你想使用像std::map<std::string,std::string>
这样的东西,你可以用一个词作为特定语言的关键词(请阅读评论中的解释):
std::map<std::string,std::string> dictionary;
ifstream in;
in.open("Q3.dic");
std::string line;
while(getline(in, line)) { // Read whole lines first ...
std::istringstream iss(line); // Create an input stream to read your values
std::string english; // Have variables to receive the input
std::string french; // ...
if(iss >> english >> french) { // Read the input delimted by whitespace chars
dictionary[english] = french; // Put the entry into the dictionary.
// NOTE: This overwrites existing values
// for `english` key, if these were seen
// before.
}
else {
// Error ...
}
}
for(std::map<std::string,std::string>::iterator it = dictionary.begin();
it != dictionary.end();
++it) {
std::cout << it->first << " = " << it->second << std::endl;
}
查看代码的Live Working Sample。
根据我在代码注释中的注释,您可能已经注意到可能需要处理非唯一english -> french
翻译。在某些情况下,字典中的一个english
关键字可能会有多个关联的翻译。
你可以克服这个,或者像这样宣布你的字典
std::map<std::string,std::set<std::string>>> dictionary;
或
std::multi_map<std::string,std::string> dictionary;