题目为:
从名为source的文件中读取简写的DNA序列,再将其完整化的写入名为target的文件中
本题的思路在于让程序检测左括号“(”和右括号“)”的存在,然后用循环输出的格式来得到还原后的序列。
还原样式:(输入的括号必须为英文括号)
ACT(AGG)3TTA -------> ACTAGGAGGAGGTTA
(ATGC)2(TTA)3 ------> ATGCATGCTTATTATTA
程序如下:(Dev C++环境)
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp1=fopen("source.txt","r"); /*以读的形式打开简写文件*/
if(fp1==NULL){ /*打不开报错*/
printf("Erro 1!");
return 1;
}
char a[200];
char b[100];
fscanf(fp1,"%s",a); /*提取字符串*/
fclose(fp1);
FILE *fp2=fopen("target.txt","w"); /*以写的形式打开需要输入的文件*/
if(fp2==NULL){
printf("Erro 2!"); /*打不开报错*/
return 2;
}
int i=0,j=0,k,l,m;
while(a[i]!='\0'){ /*遍历所有元素*/
if(a[i]=='('){ /*判断左括号的出现*/
b[100]={0};
i++;
while(a[i]!=')'){ /*在遍历到有括号之前储存中间的所有元素*/
b[j]=a[i];
j++;
i++;
}
i++;
m=a[i]-48; /*用ASC码形式获得重叠字符串需要循环的次数*/
for(l=0;l<m;l++){
for(k=0;k<j;k++){
fprintf(fp2,"%c",b[k]); /*循环输出*/
}
}
i++;
}
else{
}
fprintf(fp2,"%c",a[i]); /*其余元素正常输出*/
i++;
}
fclose(fp2); /*关闭写入文件*/
return 0;
}