2 1 3 6 0 9 0
2 9 5 0 0 8
3 10 0 6 0 6
3 1 1 0 4 0 8
2 1 7 0 0 8
3 5 0 4 0 5
4 1 3 10 0 0 7
2 5 7 0 2 0
3 8 6 0 0 7
5 1 4 0 9 8 0
2 6 2 0 0 7
3 10 0 5 0 5
6 1 2 2 0 8 0
我有很多文字文件。格式如上所述。我希望将每个列数据存储到不同的数组,例如col01[5] ={2,3,4,5,6}
(对应于第1列)。我怎样才能做到这一点? col02[15] ={1,2,3......}
(对应第二列数据)。
第一列中的数字不固定,位置也是随机的。例如,第一列中的数字随机分布在某些行中。列号固定。它可能采用以下格式:
2 1 3 6 0 9 0
2 2 9 5 0 0 8
3 10 0 6 0 6
3 1 1 0 4 0 8
2 1 7 0 0 8
5 3 5 0 4 0 5
4 1 3 10 0 0 7
2 5 7 0 2 0
3 8 6 0 0 7
5 1 4 0 9 8 0
2 6 2 0 0 7
3 10 0 5 0 5
6 1 2 2 0 8 0
我尝试使用istringstream
和getline
,但实在太复杂了。感谢
答案 0 :(得分:2)
更简单,更有效的方法是逐字符扫描文件,即增加“i”a并比较每个值。 if(i ==“”)//如果字符是“”SPACE则不做任何事情 / \ / \ if(i == 10)//如果字符是ascii(10),则输入然后切换到col01 / \ / \ else继续存储col01中的DIGITS,然后打开col02,直到col07。
这是您问题解决方案的摘要。 希望能帮助到你。 如果它现在不让我,我会很高兴再次帮助。
答案 1 :(得分:1)
Transpose
数组(like this)答案 2 :(得分:1)
保持std::map<int,std::vector<int>>
,将整数与它们所在的列配对。仔细阅读每一行,直到找到一个数字。您需要手动执行此操作,不能使用operator>>
。您需要阅读数字的末尾以确定它所在的列,然后:the_map[the_column].push_back(the_number);
答案 3 :(得分:1)
针对这个具体问题。
声明7列13个空格。
读一行。 如果第一个char不是空格,则第一个数字转到第一个col。 读到下一个号码。去第二列。 重复。
答案 4 :(得分:0)
# include < iostream>
# include < fstream>
using namespace std;
int main()
{
char ch;
char str[256];
ofstream fout("test.dat");
if(!fout) {
cout << "Cannot open file for output.\n";
return 1;
}
fout << "This is a line of text.\n";
fout << "This is another line of text.\n";
fout << "This is the last line of text.\n";
fout.close();
if(!fout.good()) {
cout << "An error occurred when writing to the file.\n";
return 1;
}
ifstream fin("test.dat", ios::in);
if(!fin) {
cout << "Cannot open file for input.\n";
return 1;
}
cout << "Use get():\n";
cout << "Here are the first three characters: ";
for(int i=0; i < 3; ++i) {
fin.get(ch);
cout << ch;
}
cout << endl;
fin.get(str, 255);
cout << "Here is the rest of the first line: ";
cout << str << endl;
fin.get(ch);
cout << "\nNow use getline():\n";
fin.getline(str, 255);
cout << str << endl;
fin.getline(str, 255);
cout << str;
fin.close();
if(!fin.good()) {
cout << "Error occurred while reading or closing the file.\n";
return 1;
}
return 0;
}