C ++从文件读取并分配给变量

时间:2015-01-03 17:03:06

标签: c++

我有一个问题。 我的文件格式如下:

A B
C D
E F
X Y
X2 Y2
X3 Y3

我知道如何分配A,B,C,D,E,F,X,Y(我检查的每个文件都有这个数据)但有时我有更多的数据,如X2 Y2,X3,Y3,我想要分配这些也是(没有先前知道文件中有多少这些)。

实际上我的代码看起来像这样:

reading >> a >> b >> c >> d >> e >> f >> x >> y;
你能帮助我吗?谢谢

5 个答案:

答案 0 :(得分:4)

这个带向量的解决方案可以解决问题:

#include <vector>
#include <string>
#include <iterator>
#include <iostream>
#include <fstream>

using namespace std;

void getItems(vector<string>& v, string path)
{
    ifstream is(path.c_str());
    istream_iterator<string> start(is), end;
    vector<string> items(start, end);
    v = items;
}

int main()
{
    vector<string> v;
    getItems(v, "C:\test.txt");

    vector<string>::iterator it;
    for (it = v.begin(); it != v.end(); it++)
        cout << *it << endl;

    return 0;
}

注意:这里我假设您的文件位于C:\ test.txt

答案 1 :(得分:0)

如果我理解你,你想确保必须阅读文件中的所有行。

使用以下代码我解决了这个问题:

std::ifstream file_reading( filename_path_.c_str(), std::ios::in );
if( file_reading ) {

  std::string buffer;
  unsigned int line_counter = 0;

  while( std::getline( file_reading, buffer ) ) {

        std::istringstream istr;
        istr.str( buffer );

        if( buffer.empty() ) 
          break;

         istr >> x_array[local_counter] >> y_array[local_counter];

             line_counter++;
       }
}

使用getline和while循环,你们都可以获得文件中的所有行,并将它们存储在可调整大小的std :: vector中。 如果在下一行中找不到更多数据,则指令中断将退出。

答案 2 :(得分:0)

您可以将所有这些输入为字符串。将标题赋予#input并使用gets()函数输入整个输入。然后处理字符串。您可以通过忽略空格(&#34;&#34;)和新线(&#34; \ n&#34;)来区分数字。 希望这有帮助!

答案 3 :(得分:0)

如果您不知道文件中有多少数据,则值得使用a WHILE循环,条件是您执行while循环,直到它到达文件末尾。

这样的东西(确保你包括:iostream,fstream和string):

int main () {
    string line;
    ifstream thefile ("test.txt");
    if (thefile.is_open()) 
    {
        while (thefile.good() )
        {
            getline (thefile, line);
        }
        thefile.close();
    }
    else 
    {
        cout << "Unable to open\n"; 
    }
    return 0;
}

答案 4 :(得分:0)

您可以使用2D矢量:

输入:

1 2 3
4 5
6
7 8 9

代码:

int  val;
string line;

ifstream myfile ("example.txt");

vector<vector<int> > LIST;

if (myfile.is_open())
{
   while ( getline(myfile,line) )
   {
      vector<int> v;

      istringstream IS(line);

      while( IS >> val)
      {
         v.push_back(val);
      }

      LIST.push_back(v);
   }

  myfile.close();
}

for(int i=0; i<LIST.size(); i++)
{
    for(int j=0; j<LIST[i].size(); j++)
    {
        cout << LIST[i][j] << " ";
    }
    cout << endl;
}

输出:

1 2 3
4 5
6
7 8 9