【发布时间】:2021-09-06 11:48:03
【问题描述】:
我必须做一个任务,我必须读取一个包含邻接矩阵的文件,然后再做一些事情。 我已经完成了所有工作,但我的代码非常慢,至少对于基准测试系统而言是这样。
我正在读取下面这段代码 sn-p 中的所有文件行:
while (fgets(buf, sizeof(buf), stdin) != NULL) {
parse(buf);
i++;
}
然后我使用 strtok 和 atoi 初始化我的二维数组:
void parse(char *str, int count, char *sep) {
//char *aux = malloc(count * sizeof(char*));
char *aux;
aux = strtok(str, sep);
int j = 0;
while (aux) {
array[(i*DIM) + j] = atoi(aux);
j++;
aux = strtok(NULL, sep);
}
//free(aux);
}
数组是 DIM*DIM 大小,每个 INT 用逗号分隔。
3*3 矩阵的样本输入:
1,20,1
0,111,3
4,7,10
如何改进这一点以获得更好的性能?
编辑:
数组定义:
array = malloc(DIM*DIM*sizeof(int));
【问题讨论】:
-
array是如何声明的,您不使用二维数组的原因是什么?另外,当您只使用一个aux时,为什么还要为多个aux分配空间? -
无论如何,我认为您正在寻找的解决方案是
strtol在循环中重复调用。不需要 strtok 和 malloc。并且永远不应该使用 atoi。 -
发布 cmets 时,请查看框右下角的小帮助链接以获取格式提示。无论如何,您应该通过编辑来澄清问题本身。
-
我之前主要是用strtol,这比atoi和strtok快很多吗?
-
@sarcokiller strtol 优于 atoi 的主要优点是它具有错误处理功能,因此您可以在循环中检查其结果。动态内存分配很慢,并且同时使用 strtok + 其他一些解析函数会多次循环相同的数据。我可以用一些示例代码来制作答案。
标签: c performance gcc