gpt4 book ai didi

c - 从文本文件填充 C 中的二维数组

转载 作者:行者123 更新时间:2023-11-30 17:02:27 25 4
gpt4 key购买 nike

我有一个文本文件,它提供用于在城市之间创建通信网络的输入数据。

N=12

C=[72,107,65,99,20,11,31,7,42,28,4, 31,10,57,37,71,18,17,73,39,14, 91,77,19,39,33,59,31,44,98, 71,66,36,23,10,100,93,41, 21,80,22,43,78,22,93, 77,81,49,62,89,19, 21,19,51,40,18, 102,92,28,51, 31,47,51, 73,38, 50]

R=[0.81,0.88,0.83,0.90,0.98,0.93,0.86,0.91,0.92,0.86,0.80, 0.91,0.87,0.78,0.83,0.90,0.93,0.87,0.79,0.99,0.94, 0.88,0.98,0.97,0.96,0.92,0.81,0.99,0.92,0.91, 0.80,0.88,0.87,0.93,0.90,0.99,0.98,0.91, 0.89,0.80,0.92,0.93,0.83,0.87,0.99, 0.97,0.91,0.89,0.99,0.94,0.90, 0.87,0.89,0.95,0.85,0.96, 0.99,0.79,0.88,0.81, 0.84,0.97,0.77, 0.83,0.93, 0.99]

a_b=1

Req_Reliability = 0.5

Req_Cost = 267

地点:N 是网络中的城市数量 CR 对称 N×N 矩阵,分别给出在两个城市之间实现连接的成本和可靠性。

N 可以变化,只要它是 2 以上的整数即可。并且给定的矩阵 C 和 R 也会相应变化。

从文本文件中,由于矩阵是对称的,因此只给出了矩阵的上半部分,所有索引 i=j 的元素都应该为 0,这样矩阵 C 在文本文件中的格式如下:

C=[C(1-2),C(1-3),...,C(1-12),whitespaceC(2-3),C(2-4),...,C(2-12),...,whitespaceC(11-12)]
with C(IDstartCity-IDstopCity)

文本文件中的空格表示对下一行的更改,相同的结构适用于矩阵 R。

我想要做的是将每个变量分配给我的 C 程序中的匹配项。虽然我知道如何将 12 分配给 N,但我对如何将文本文件中的矩阵 C 和 R 的奇怪结构分配给 C 程序中的矩阵一无所知。

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

FILE *finput;
char var_name[5];
int value = 0;
finput = fopen("Prj1_input.txt", "r");

//Inputs Start
int N; //Number of cities
//Cost Array
int **C = malloc(N * sizeof(int*));
for (i = 0; i < N; i++) {
C[i] = malloc(N * sizeof(int));
memset(C[i], 0, N * sizeof(int));
}

//Reliability Array
double **R = malloc(N * sizeof(double*));
for (i = 0; i < N; i++) {
R[i] = malloc(N * sizeof(double));
memset(R[i], 0, N * sizeof(double));
}
int con_cost; //Connection cost between 2 cities
double con_reliability; //Connection reliability between 2 cities

int a_b; //0 is type a, 1 is type b

double Req_reliability, Req_cost; //reliability for type a, cost for type b
//Inputs Stop


fscanf(finput, "%c=%d", var_name, &value);

printf("%s %d\n", var_name, value);



fclose(finput);

return 0;
}

我想我可以使用两个 for 循环,当我在文本文件中找到空格时,我会增加行,但我完全不知道如何处理文本文件。

现在,如果我注释掉//input start 和//input stop 之间的所有内容,则输出为 氮12

谢谢

最佳答案

以C为例,先制作一个大小为N的数组组成的数组:

int **C = malloc(N * sizeof(int*));
for (i = 0; i < N; i++) {
C[i] = malloc(N * sizeof(int));
memset(C[i], 0, N * sizeof(int));
}

然后循环并赋值给矩阵:

char *s = "<the string inside the [...]>";
char *p = s, *e;
for (i = 0; i < N; i++) {
for (j = i + 1; j < N; j++) {
e = strchr(p, ',');
*e = '\0';
C[i][j] = atoi(p);
p = e + 1;
}
}

关于c - 从文本文件填充 C 中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com