大家晚上好,
我正在尝试使用以下格式从文本文件源中读取:
doomsday [villain]
Doomsday is a fictional supervillain appearing in American comic books published by DC Comics.
superman [hero]
Superman is a fictional superhero appearing in American comic books published by DC Comics.
这是两个条目。我需要提取名称,角色和描述,以便将其放入一个对象,例如。
DCCharacters newCharacter(characterName, characterRole, description);
到目前为止我的代码:
ifstream fileToOpen(fileSrc);
if (fileToOpen.is_open()) {
string line;
string charName;
string charRole;
string charDesc;
while (!fileToOpen.eof()) {
getline(fileToOpen, line);
charName = line;
if (line == "") continue; // Skip blank lines
getline(fileToOpen, line);
charDescription = line;
if (line == "") continue;
DCCharacters newCharacter(characterName, characterRole, description);
this->DCCharsVector.push_back(newCharacter);
}
// Close the file
fileToOpen.close();
}
}
正如你所看到的,我可以在一行中提取字符名称和角色,在另一行中提取描述,但我现在不知道如何将名称和角色分成两个单独的变量,以便将它们放入对象中,就像我需要的那样。
我期待着任何帮助。
答案 0 :(得分:0)
std::getline()还有一个重载,可以解决您的问题:
istream& getline (istream& is, string& str, char delim);
如果您使用' ' (空格字符)作为分隔符,std::getline()
将只读取它看到的第一个空格。
因此,您的代码可能如下所示:
if (fileToOpen.is_open())
{
string line;
string charName;
string charRole;
string charDesc;
while (!fileToOpen.eof())
{
getline(fileToOpen, line, ' ');
charName = line;
if (line == "") continue; // Skip blank lines
getline(fileToOpen, line);
charRole = line; //possibly strip off '[]' before assigning
if (line == "") continue; // Skip blank lines
getline(fileToOpen, line);
charDescription = line;
if (line == "") continue;
DCCharacters newCharacter(characterName, characterRole, description);
DCCharsVector.push_back(newCharacter);
}
// Close the file
fileToOpen.close();
}
在旁注中,你不必要地多次复制字符串。您可以将charName
等作为参数传递给std::getline()
并删除line
变量
此外,由于您标记了C++11
,因此您可以使用
DCCharsVector.emplace_back(characterName, characterRole, description)
避免创建临时对象。