回复 5楼 TonyDeng
#include"stdio.h"
#include"stdlib.h"
#define M 1348
//cds区间数不为0且为负链的基因数
FILE *str1,*date1;
struct motif
{
int num;
char gene[20];
char xulie[9500000];
//选择9500000是因为1438行序列中最长的一行为9000000多
}lead[M]
int main()
{
int i,j,m;
char zifu;
date1=fopen("E:\\寻找内含子序列\\内含子负序列.txt","rt");
str1=fopen("E:\\寻找内含子序列\\内含子最终负序列.txt","wt");
for(i=0;i<M;i++)
fscanf(date1,"%s\t%d\t%s",&lead[i].gene,&lead[i].num,&lead[i].xulie);
//读取基因、cds序列长度、cds序列
for(i=0;i<M;i++)
for(j=0;j<lead[i].num/2;j++)
{
m=lead[i].num;
//m指序列长度
zifu=lead[i].xulie[j];
lead[i].xulie[j]=lead[i].xulie[m-1-j];
lead[i].xulie[m-1-j]=zifu;
//第一个与最后一个、第二个与倒数第二个等替换
}
for(i=0;i<M;i++)
for(j=0;j<lead[i].num;j++)
{
if(lead[i].xulie[j]=='A')
{
lead[i].xulie[j]='T';
continue;
//加continue表明完成操作后继续循环,不执行下面的;要加{}否则不管第一个if是否成立执行continue继续循环
}
if(lead[i].xulie[j]=='T')
{
lead[i].xulie[j]='A';
continue;
}
if(lead[i].xulie[j]=='C')
{
lead[i].xulie[j]='G';
continue;
}
if(lead[i].xulie[j]=='G')
lead[i].xulie[j]='C';
}
for(i=0;i<M;i++)
{
fprintf(str1,"%s\t%d\t",lead[i].gene,lead[i].num);
for(j=0;j<lead[i].num;j++)
fprintf(str1,"%c",lead[i].xulie[j]);
fprintf(str1,"\n");
}
fclose(str1);
fclose(date1);
}
这个程序,当最长序列为900多万时运行不了,求解