我想编写一个C ++函数来读取文件(例如一个包含2列或更多列的表)并将每列作为数组返回。我怎样才能做到这一点?如何在主程序中从此函数中读取数组?
我可以为具有1列(1个数组)的文件执行此操作,以便该函数返回指针。但是,如何返回许多数组(或指向这些数组的指针)并在以后的主程序中读取它们?
示例“table.txt”:
1 10
2 20
3 30
4 40
5 50
答案 0 :(得分:1)
看起来你拥有的是关键价值对。最好的办法是从函数中返回一个std :: map。这是它的样子:
std::map<int, int> parseFile()
{
}
在解析文件时,将键值对作为std :: pair添加到std :: map。
答案 1 :(得分:1)
您可以使用包含向量的向量。基本上你会将每一行分成适当的单词并将它们推送到向量容器中相应列的右向量。
答案 2 :(得分:0)
在调用者中声明数组并通过参数传递它们。
void fill(int *a, int *b, int *c) {
a[0] = b[0] = c[0] = 1;
//...
}
void func() {
int a[10], b[10], c[10];
fill(a, b, c);
//...
}
或者,您可以使用所有元素类型定义结构,并返回这些结构的单个数组。
答案 3 :(得分:0)
由于你在讨论指针(在我的观点中,C语言比C ++更多),你可以返回相同的单个指针,但该指针必须指向一个包含两个数组指针的结构。
类似的东西:
typedef struct _two_arrays{
/*Assuming it is an array of ints*/
int *arr_1;
int *arr_2;
}TwoArr;
TwoArr *yourFunction(/*Argss*/){
TwoArr *arrs = (TwoArr*)malloc(sizeOf(TwoArr));
/*Columns to your arrays ...*/
arrs->arr_1 = yourArr1;
arrs->arr_2 = yourArr2;
return arrs;
}
或者,以c ++方式,您可以使用std::vector<std::vector<YOUR_TYPE>>
答案 4 :(得分:0)
我假设你是C ++的新手。 Vector是可以使用的数据结构,而不是数组。 您可以在此处找到更多信息[] http://www.cplusplus.com/reference/vector/vector/。 在没有复杂化的情况下,您可以在main函数中声明两个向量cloumn1和column2(您可以将它们视为无限大小的数组)并调用loadMatrixFromFile,如下所示:
vector<int> column1,vector<int> column2;
if(!loadMatrixFromFile(inputFile,column1,column2))
{
cerr << "Uh oh, failed in loading matrix form file" << endl;
exit(1);
}
并创建如下函数:
bool loadMatrixFromFile(ifstream & inputFile,vector<int> & col1,vector<int> & col2)
{
while (inputFile)
{
string line;
getline(inputFile,line);
int n;
stringstream tempLine(line);
for (int i=0;i<2;i++)
{
tempLine>>n;
if (i==0)
col1.push_back(n);
else
col2.push_back(n);
}
}
return true;
}
执行该函数后,向量column1,column2将包含文件中的列值。
如果您习惯使用矢量,那么您可以使用矢量矢量(如数组数组中)来创建可以保存每列矢量的矢量,而不是为每列声明一个矢量。