题目是输入两串配对的DNA字符串(长度100以内),在CCCGGG处中间切断然后让切断后的各子串从最后一个开始依次相连。我目前遇到的问题在前半段,我想用如下的代码标出各需要切割的点的位置(标号在6个字母里的4个),存储在数组p中。(之后将数组p内元素排序并求出每个切割后子串的长度)。但是如下代码我在实际运行中却出现了p[1]和j同时变化的境况。举例,我输入
“CCCGGG
GGGCCC"
即将执行p[n++]=j+3后,理论结果应为p[1]=3,j=0,pn=2吧。但是我调试结果xian'sj同p[1]一起变成了3,之后随着循环变化j变回了0,然后p[1]此时也跟着变回了0,两者一起变化之后也有发生。所以这个问题是出在哪里了呢?自己发现原因了。是因为p,l两个数列没有声明长度。
#include <stdio.h>
#include <math.h>
char in[2][101],out[2][101];
char *to[2],*sub[2];
char window[6]={'C','C','C','G','G','G'};
int i,len,j,wj,wn,t,q;
int p[],l[];
int pn = 0;
int main( )
{
gets(in[0]);
gets(in[1]);
len=strlen(in[0]);
p[pn++]=0;
for (i=0;i<2,i++){
for (j=0;j<(len-5);j++){ //找出断点,右侧标号
wj=j;wn=0;
while (in[0][wj] == window[wn]){
wj++;wn++;
if (wn==6){
p[pn++] = j + 3;
break;
}
}
}
}
for (i=0;i<pn-1;i++){ //排序
t=i;
for (j=i+1;j<pn;j++){
if (p[wj]>p[j])
t=j;
}
if (t != i){
q=p[t]; p[t]=p[i]; p[i]=q;
}
}
for (i=0;i<pn-1;i++){ //每子串长度
l[i]=p[i+1]-p[i];
}
l[pn-1]=len-p[pn-1];