Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;从文件I/O解析数据_C++ - Fatal编程技术网

C++ c++;从文件I/O解析数据

C++ c++;从文件I/O解析数据,c++,C++,我正在为1编写代码。通过命令行参数2从文件读入。解析每行数据(字符串)和3。将数据拆分为4个子字符串 假设我有game.txt 3 overwatch|hanzo|junkrat|reinhart league of legends|vayne|ezreal|master yi starcraft|marine|zergling|zealot 我想要的输出是将每行数据分割成4个子字符串,并将每一列保存到某种容器中。可能是字符串的linkedlist或字符串数组。 所以 我已经尝试了几种方法来解

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

假设我有game.txt

3
overwatch|hanzo|junkrat|reinhart
league of legends|vayne|ezreal|master yi
starcraft|marine|zergling|zealot
我想要的输出是将每行数据分割成4个子字符串,并将每一列保存到某种容器中。可能是字符串的linkedlist或字符串数组。 所以

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

我可以在这里做什么?

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

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

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;
}
使用String=std::String;
int main(int argc,const char*argv[]{
//在这里插入代码。。。
std::ifstream inputFileStream(“Input.txt”);
整数计数;
输入文件流>>计数;
忽略(1,“\n”);
for(int i=0;i请显示您的尝试。这将有助于获得更好的答案。如果每一行始终具有相同的内容,请考虑定义类并使用该类的STD::vector可以用来读取文件中的行。堆栈溢出的无数例子。您可以使用相同的函数读取<代码> < <代码> >从<代码>分隔的字符串。std::istringstream
。所有流类上都有helper
getline
成员函数。非常感谢Andrew。我确实读了一些关于istringstream的示例,但我不完全理解它是如何使用的。我将再试一次并发布后续状态。
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;
}