将文件中的数据转换为整数数组(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)

然后使用strtokatoi(将字符串转换为int,也可以使用strtolsscanf)函数来获取每一行的所有编号。

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;

另一答案

您似乎在这里有两个独立的问题。

  1. 读取正确的列
  2. 仅存储唯一值

[如果您正在寻找一种非常简单而优雅的解决方案,那么我可能会感到失望。


阅读以下栏中的内容:

如果尚未将原始文件读入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)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 C++ 或 C 中的字符串转换为整数数组?

如何在C ++中将字节数组中的整数转换为数字

将数组中的字符转换为整数

高手请进!如何把整形数据转换为字符串(C语言)?

如何组合两个字符串,然后将其转换为 C 中的整数

线程 Thread-5 中的异常:TypeError:只能将整数标量数组转换为标量索引