用2个分隔符分隔输入文件

时间:2018-12-09 21:01:25

标签: c++ file input delimiter

我必须读取一个文件,其中该行的第一个字符是对象的名称,第二个字符(用空格分隔)是该对象的数据。

我想知道如何(在C ++中)将这些数据中的每一个逐一读入不同的向量中。

1 个答案:

答案 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>>?所有这些都有一个优点,就是它们将键和值保持在一起,并且会更合适,除非您打算独立维护键和值(例如,对键进行排序,而值可能/应该保持原始顺序)。