我有一道题目,要求建立一个索引,然后我想用链表或数组从txt导入数据 |
|
100分 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> char *DNA; char ln[200]; char st[200]; FILE *f; int i,n; int main() { DNA=(char *)calloc(1000000*200,1); if (null==DNA) { printf("Can not calloc 1000000*200 bytes!\n"); return 1; } f=fopen("in.txt","r"); if (NULL==f) { printf("Can not open file in.txt!\n"); return 2; } i=0; while (1) { if (NULL==fgets(ln,200,f)) break; if (1==sscanf(ln,"%199[ACGT]",st)) { strcpy(DNA+i*200,st); i++; if (i>=1000000) break; } } fclose(f); n=i; for (i=0;i<n;i++) printf("%s %d\n",i+1,DNA+i*200); free(DNA); return 0; } |
第32行
for (i=0;i<n;i++) printf(“%s %d\n”,i+1,DNA+i*200); 应改为 for (i=0;i<n;i++) printf(“%s %d\n”,DNA+i*200,i+1); |
|
两贴无区别啊
|
|
#include<stdio.h> #include<malloc.h> int main() { int invalidnum; int id,len; char *val=NULL; FILE *file=fopen("in.txt","r"); if(!file) { fputs("Can""t open file in.txt",stderr); return 1; } else { while(fscanf(file,">read_%d_%d_%d random_genome_%d %d %d\n",&invalidnum,&id,&invalidnum,&invalidnum,&invalidnum,&len)!=EOF) { char *tval=(char*)realloc(val,sizeof(char)*++len); if(!tval) { if(val)free(val); fclose(file); fputs("No memory can be allocated",stderr); return 2; } val=tval; fgets(val,len,file); printf("%s\t%d\n",val,id); fgetc(file); } if(val)free(val); fclose(file); } return 0; } |
|
链表及文件操作参考代码
https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c |
|
额,题目的要求是什么?如果只是编号1楼的程序没解决吗?
要不lz把题目截个图,把完整的要求发上来 |
|
1.单链表双链表都可行,好像你知道总数(100个),因此,静态或动态指针数组也能办
2.如果是格式化数据结构写进去的,当然逆向能格式化读出。如果不是转3 3.字符串解析,很显然,遇到第一个大写字母,开始记录,遇到第一个非大写字母,提取字符串结束。将此字符串存储编号;如此循环 注:为了提高读取的速度,可考虑使用文件映射方式,将文件映射进内存,如此就像处理普通字符串数组一样了! |