题目:DNA 序列还原。某生物学文件内容为多条长度不等 DNA 序列,为书写方便其中有些片段用小括
号括起并跟一个 int 数字,表示该片段需要重复多次。如“(AGG)3”表示“AGG”片段需要重
复 3 次,请按要求将源文件还原后写入新的文件中。注意:括号内的 DNA 片段长度不定长,重
复次数可能是个多位数。
但下面的代码运行后,在目标文件没输入内容。
#include<stdio.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
FILE* fp1;
errno_t err1 = fopen_s(&fp1, "D://source.txt", "r"); /*以读的形式打开简写文件*/
if (fp1 == NULL)
{ /*打不开报错*/
printf("Erro 1!");
return 1;
}
char a[200];
char b[100];
fscanf_s(fp1, "%s", a); /*提取字符串*/
fclose(fp1);
FILE* fp2;
errno_t err2 = fopen_s(&fp2, "D://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;
}