|
我有一道题目,要求建立一个索引,然后我想用链表或数组从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.字符串解析,很显然,遇到第一个大写字母,开始记录,遇到第一个非大写字母,提取字符串结束。将此字符串存储编号;如此循环 注:为了提高读取的速度,可考虑使用文件映射方式,将文件映射进内存,如此就像处理普通字符串数组一样了! |
|