将文件中的数据转换为整数数组(C)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将文件中的数据转换为整数数组(C)相关的知识,希望对你有一定的参考价值。
我在txt中包含以下数据。我想将第4列的每个数字提取到没有重复数字的数组中
[1] [0] 1 0
[1] [0] 1 1
[1] [2] 1 6
[1] [3] 1 8
[1] [4] 2 8-12
[1] [5] 2 6-10
[1] [6] 3 8-12-18
[1] [7] 4 8-12-18-24
[1] [8] 4 8-14-34-31
[1] [9] 3 6-10-20
[1] [10] 2 8-14
[1] [11] 3 8-14-34
[1] [12] 3 8-14-36
[1] [13] 4 8-14-34-38
输出应该是这样的:[0,1,6,8,12,10,18,24,34,31,6,20,14,36,38]
我如何将它们存储到数组中?
答案
以下是我的想法,希望它能对您有所帮助。
您可以使用此文件中的fgets信息
char line[256];
int first, second, third;
char forth[256];
while (fgets(line, sizeof(line), file))
printf("%s", line);
sscanf(line, "[%d] [%d] %d %s\n", &first, &second, &third, forth)
然后使用strtok
和atoi
(将字符串转换为int,也可以使用strtol
或sscanf
)函数来获取每一行的所有编号。
char* token = strtok(line, "-");
while (token != NULL)
int i = atoi(token)
token = strtok(NULL, "-");
将i
值复制到数组。
然后创建一个消除重复号码的功能,例如:
uint32_t delete_duplicate_value (uint32_t * list, uint32_t size)
for (uint32_t i = 0; i < size; i++)
for (uint32_t j = i+1; j < size; j++)
if (list[i] == list[j])
for (uint32_t k = j; k < size; k++)
list[k] = list[k + 1];
size--;
j--;
return size;
另一答案
您似乎在这里有两个独立的问题。
- 读取正确的列
- 仅存储唯一值
[如果您正在寻找一种非常简单而优雅的解决方案,那么我可能会感到失望。
阅读以下栏中的内容:
如果尚未将原始文件读入char数组或类似数组,则可以阅读如何读here。假设数据的格式与上面的格式完全一样,看来您希望的列在换行符后是12个字符,因此您需要执行类似(pseudocode)
的操作create array to hold values
array[0] = file[12]
int to store current array index
for(i = 1 ; i < file_lenght ; i++)
if(file[i] != '\n')
continue;
else
\\ if not duplicate
array[current_index] = file[i+12];
current_index++;
避免重复:
您可以按照上面的方法填充数组,然后再删除重复项,但是避免首先添加重复项可能会更容易。函数可能看起来像这样
for(j = 0 ; j < array_length ; j++)
if(file[j] == new_value)
return false;
return true;
返回true将导致程序流向该数组添加新值。
通过将它们组合在一起,您应该正确地填充阵列。
以上是关于将文件中的数据转换为整数数组(C)的主要内容,如果未能解决你的问题,请参考以下文章