很长的内含子序列前后翻转,怎么解决呀!
内含子串联负序列.rar
(762.61 KB)
这是500多万个碱基长的字符串,当然这只是一个很短的内含子,还有几千万个、甚至几亿个碱基长的,现在要把内含子序列前后翻转过来,即第一个碱基变成最后一个,第二个变成倒数第二个,第三个变成倒数第三个等;实现完这个过程后好要将碱基字符A换成T,T换成A,C换成G,G换成C。 这是我自己编的程序,但运行有问题,请各位大侠帮忙优化或修改一下,谢谢!!!!
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
FILE *in,*out;
int main()
{
int i;
int sum;
static char str[55000000];
char zifu;
in=fopen("F:\\寻找内含子序列\\内含子串联负序列.txt","rb"); //第12行
out=fopen("F:\\寻找内含子序列\\收获1.txt","wb");
while(!feof(in))
{
fgets(str,sum+1,in);
sum=strlen(str);
for(i=0;i<sum/2;i++)
{
zifu=str[i];
str[i]=str[sum-1-i];
str[sum-1-i]=str[i]; //第一个与最后一个、第二个与倒数第二个等替换
}
for(i=0;i<sum;i++)
{
if(str[i]=='A')
{
str[i]='T';
continue; //加continue表明完成操作后继续循环,不执行下面的;要加{}否则不管第一个if是否成立执行continue继续循环
}
if(str[i]=='T')
{
str[i]='A';
continue;
}
if(str[i]=='C')
{
str[i]='G';
continue;
}
if(str[i]=='G')
str[i]='C';
}
}
fputs(str,out);
fclose(in);
fclose(out);
}