使用ifstream将文件(包含int,string)读取到对矢量

问题描述 投票:0回答:1

我正在尝试将文本文件读成对的向量。文本文件包含以下内容:第一行说明有多少字符串。第二行是一个int,告诉第一个字符串中有多少个字符。然后,第三行包含字符串本身。之后,接下来是“模式”(再次使用int有多少个字符,然后是字符串本身)。例如:

  • 2
  • 3
  • ABC
  • 4
  • CDEF

我的想法是,分别阅读第一行(工作正常)。然后为每个int和string创建对。第二部分,不知何故,不起作用,所以如果有人能帮我找到错误,我真的很感激。

所以这是我的代码:

#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <utility>

using namespace std;

int main(int argc, char *argv[])
{

if (argv[1]) 
{some code here...}

// arg[2] is formatted in some manner of the example above

if (argv[2])
{

//Declare Variables:
    string buffer;
    string temporary;
    vector <pair <int, string> >  patVec;
    pair <int, string> patPair;

// Ifstream first txt File = (argv[2]

        ifstream ifile2(argv[2]);

// Get first line and store in variable number of Patterns --> This works fine

        getline(ifile2, temporary);
        int numberOfPatterns = atoi(temporary.c_str());
// Process rest of file

       int i;
       for (patVec[i=0]; i <= numberOfPatterns - 1; i++)
        {
         getline(ifile2, buffer);

         stringstream strs(buffer);

 // Fill up the Vector with pairs
            strs >> patPair.first;
            strs >> patPair.second;

            patVec.push_back(patPair);
        }
    }
 }

所以这是相关部分的更正版本,现在有效:感谢提示;)

    //Declare Variables
    string buffer;
    string temporary;
    vector <pair <int, string> >  patVec;
    pair <int, string> patPair;
    int plength;
    string pCharacters;

    // Get first line and store in variable number of Patterns

    getline(ifile2, temporary);

    int numberOfPatterns = atoi(temporary.c_str());

    cout << "The number of Patterns is " << numberOfPatterns << endl;


    // Process rest of file

    for (int i=0; i <= numberOfPatterns - 1; i++)
    {

       // stringstream strs(buffer);

        // Fill up the Vector with pairs
        getline(ifile2, buffer);
        stringstream int_reader(buffer);
        int_reader >> plength;

        getline(ifile2, buffer);
        stringstream str_reader(buffer);
        str_reader >> pCharacters;


        patPair = make_pair (plength, pCharacters);

        patVec.push_back(patPair);

        cout << "length of pattern " << i << " is " << plength << endl;
        cout << " characters are: " << pCharacters << endl;

    }

        ifile2.close();

    }
c++ vector ifstream std-pair
1个回答
0
投票

这是一个更正的程序。它仍然存在一些问题,例如:

  1. 变量的预先声明。
  2. 这对没有typedef。

但它看起来效果很好。

#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>

int main(int argc, char * argv[])
{
    //Declare Variables:


    std::string buffer;
    std::string temporary;
    std::vector <std::pair <int, std::string> >  patVec;
    std::pair <int, std::string> patPair;

    // Ifstream first txt File = (argv[2]

    std::ifstream ifile2((const char *)(argv[2]));

    // Get first line and store in variable number of Patterns --> This works fine

    getline(ifile2, temporary);
    int numberOfPatterns = atoi(temporary.c_str());
    // Process rest of file

    for (int i = 0 ; i <= numberOfPatterns - 1; i++)
    {
        getline(ifile2, buffer);

        std::stringstream int_reader(buffer);

        // Fill up the Vector with pairs
        int_reader >> patPair.first;

        getline(ifile2, buffer);
        std::stringstream str_reader(buffer);
        str_reader >> patPair.second;

        patVec.push_back(patPair);
    }

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.