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;
你能帮助我吗?谢谢
答案 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