c ++解析来自文件I / O的数据

时间:2016-10-11 04:15:17

标签: c++

我正在编写代码1.通过命令行参数从文件读入,2。解析每行数据(字符串)和3.将数据拆分为4个子字符串。

说我有game.txt

3
overwatch|hanzo|junkrat|reinhart
league of legends|vayne|ezreal|master yi
starcraft|marine|zergling|zealot

我想要的输出是将每行数据分成4个子串,我想将每个相应的列保存到某种容器中。可能是字符串的链表或字符串数​​组。 所以,

overwatch
hanzo
junkrat
reinhart
league of legend
vayne
ezreal
...


String nameOfGame = overwatch;
String leastFav = hanzo;
String fav = junkrat;
String bestCharacter = reinhart;

我已经尝试了几种方法来解决这个问题,但是我看不到逻辑上有字符串读入和同时解析。这个概念对我来说还是新的,我需要一些建议,从哪里开始以及如何解决问题。

我能在这做什么?

1 个答案:

答案 0 :(得分:1)

您可以使用ifstream从文件中读取第一个数字和lines。 要从任意行获取数据,您可以使用istringstream。您可以使用行字符串创建istringstream对象。 之后,您可以使用带有delim ='|'的方法getline来读取该行中的组件。

之后,您可以根据需要打印行

using String = std::string;

int main(int argc, const char * argv[]) {
    // insert code here...

    std::ifstream inputFileStream("Input.txt");
    int count;
    inputFileStream>>count;
    inputFileStream.ignore(1, '\n');

    for(int i = 0; i < count; i++)
    {
        String line;
        std::getline(inputFileStream, line);

        std::istringstream lineStream(line);

        String nameOfGame;
        String leastFav;
        String fav;
        String bestCharacter;

        std::getline(lineStream, leastFav, '|');
        std::getline(lineStream, nameOfGame, '|');
        std::getline(lineStream, fav, '|');
        std::getline(lineStream, bestCharacter, '|');

        std::cout<< leastFav <<"\n"<<nameOfGame<<"\n"<<fav<<"\n"<<bestCharacter<<"\n\n";
    }

  return 0;
}