我想将文件的以下内容加载到数组中。 文件内容:
[1,2,3,4,5]
[2,3]
[2]
[1,4,5,6,8,9]
现在,我想将第一行加载到整数数组'a' ( a ={1,2,3,4,5})
并执行一些操作。免费的采取下一行并加载到'a' (a = {2,3})
并执行一些操作等等..直到文件结束。
注意:每行可以有不同的数字。(我们不知道每行中的数字数量)
如何扫描每一行,只取数字并将它们存储在一个数组中? 我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define DELIM " \r\n\t!@#$%^&*()_+-={}|\\:\"'?¿/.,<>’¡º×÷‘"
int main(int argc, char *argv[]){
int lineIdx = 0;
int charIdx = 0;
int TERMINATOR = 1753775;
char *token = "tmp";
char *orLine = malloc(4096 * sizeof(char));
char **importedLine = malloc(4096 * sizeof(orLine));
int tokenizedArray[100][100];// = malloc(sizeof(orLine * numOfLines));
FILE *f = fopen(argv[1], "r");
while(fscanf(f, "%s", orLine) != EOF){
importedLine[lineIdx] = orLine;
for(charIdx = 0; charIdx < strlen(importedLine[lineIdx]); charIdx++){
importedLine[lineIdx][charIdx] = importedLine[(lineIdx)][(charIdx+1)];
}
importedLine[lineIdx][(strlen(importedLine[lineIdx])-1)] = NULL;
token = strtok(importedLine[lineIdx], ", ");
charIdx = 0;
while(token != NULL){
tokenizedArray[lineIdx][charIdx] = atoi(token);
token = strtok(NULL, ", ");
charIdx++;
}
tokenizedArray[lineIdx][(charIdx)] = TERMINATOR;
lineIdx++;
}
tokenizedArray[(lineIdx)][0] = TERMINATOR;
fclose(f);
lineIdx = 0;
charIdx = 0;
while(tokenizedArray[lineIdx][charIdx] != TERMINATOR){
while(tokenizedArray[lineIdx][charIdx] != TERMINATOR){
printf("%d ",tokenizedArray[lineIdx][charIdx]);
charIdx++;
}
lineIdx++;
charIdx = 0;
printf("\n");
}
return 0;
}
提前致谢
答案 0 :(得分:0)
请按照以下步骤操作:
[
开头,以]
,
处的分割线。现在你知道元素的数量了答案 1 :(得分:0)
大致
1首先在阅读模式下打开文件FILE*p;p=fopen("file.txt","r");
2取任何char数组说
char acline[40];int i;
3现在逐行使用循环读取文件内容并将它们存储到acline
while (!feof(p)) {for(i=0;i<40;i++)acline[i]=NULL;fgets(acline,40,p);// your code , whole line is in your array , insert if condition to check []}
4关闭文件fclose(p);
使用while(!feof(p))时会有一些问题!
答案 2 :(得分:0)
一个。使用一个int temporary_array[BIG_ENOUGH];
B中。使用两个整数变量int num;
,int i=0;
,一个整数指针int *a
。
℃。打开文件
d。阅读每个角色。对于每个角色,请执行以下操作:
如果角色的ascii代码是数字的代码,则执行num = whatEverThatNumberIs;
。然后执行temporary_array [i] =num;
i++;
当你得到\n
时,你就有了一行。执行a = malloc(i*sizeof (int));
然后将每个元素从temporary_array [ ]
复制到a [ ]
。然后执行i=0;
。
现在你有你的阵营a [i]
。在此阵列中执行要执行的操作。
free (a);
执行此操作直到您到达文件末尾。我想这是你可以做到的一种方式。
答案 3 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Type;
typedef struct vector {
size_t size;
size_t capacity;
Type *array;
} Vector;
Vector *vec_make(void){
Vector *v = malloc(sizeof(*v));
if(v){
v->size = 0;
v->capacity=16;
v->array = malloc(v->capacity * sizeof(Type));
}
return v;
}
void vec_free(Vector *v){
free(v->array);
free(v);
}
void vec_add(Vector *v, Type value){
v->array[v->size++] = value;
if(v->size == v->capacity){
Type *temp;
temp = realloc(v->array, sizeof(Type)*(v->capacity += 16));
if(!temp){
perror("realloc at vec_add");
vec_free(v);
exit(-1);
}
v->array = temp;
}
}
int main(int argc, char *argv[]){
if(argc != 2){
fprintf(stderr, "Usage : %s filename\n", argv[0]);
exit(EXIT_FAILURE);
}
FILE *f = fopen(argv[1], "r");
if(f == NULL){
perror("fopen");
exit(EXIT_FAILURE);
}
char line[4096];
while(fgets(line, sizeof line, f)){
static const char *delimiter = "[,] \t\n";
Vector *v = vec_make();
char *number = strtok(line, delimiter);//Format don't check
for(; number; number = strtok(NULL, delimiter)){
vec_add(v, atoi(number));
}
//some operation : print out
int size = v->size;
int *a = v->array;
for(int i = 0; i < size; ++i){
if(i)
putchar(',');
printf("%d", a[i]);
}
putchar('\n');
vec_free(v);
}
fclose(f);
return 0;
}