我必须读取一个文件,其中该行的第一个字符是对象的名称,第二个字符(用空格分隔)是该对象的数据。
我想知道如何(在C ++中)将这些数据中的每一个逐一读入不同的向量中。
答案 0 :(得分:0)
您很幸运,我在写代码的心情中...
逐行获取字符串:
std::ifstream file(path);
if(file) // opened successfully?
{
std::string line;
while(std::getline(file, line))
{
// use line
}
if(file.eof())
{
// entire file read, file was OK
}
else
{
// some error occured! need appropriate handling
}
}
分割字符串:
std::string s = "hello world";
auto keyEnd = std::find_if(s.begin(), s.end(), isspace);
auto valueBegin = std::find_if(i, s.end(), isalnum);
std::string key(s.begin(), keyEnd);
std::string value(valueBegin, s.end());
您现在可以同时检查键和值的有效格式,例如。 G。都只包含一个字符,如果无效,则拒绝文件...
两个向量?您可以同时使用push_back
和键值,但是也许std::map<std::string, std::string>
(或std::unordered_map
)是更好的选择?甚至std::vector<std::pair<std::string, std::string>>
?所有这些都有一个优点,就是它们将键和值保持在一起,并且会更合适,除非您打算独立维护键和值(例如,对键进行排序,而值可能/应该保持原始顺序)。