0

我正在编写一个函数,它只计算 DNA 的“互补”链,意思是用 G 代替 C,用 A 代替 T,等等。

这就是我写的:

#include <stdio.h>
#include <string.h> 
#define SIZE 70

int isLegitSequence(char sequence[]);
void getComplementaryStrand(char complementary[],char sequence[]);
int findSubSequence(char sequence[],char subsequence[]);
int findSubComplementary(char sequence[],char subcomplementary[]);
void cutSequence(char sequence[],char tocut[]);
void checkDNAList(char data[][SIZE],int rows,char sequence[]);


void main(){
    char dnaSequence[SIZE];
    char compDnaSequence[SIZE];

    printf("Enter a DNA Strand\n");
    gets(dnaSequence);
    printf("%d\n",isLegitSequence(dnaSequence));
    getComplementaryStrand(compDnaSequence,dnaSequence);
    puts(compDnaSequence);

}

int isLegitSequence(char sequence[]){
    int i=0;
    while (sequence[i]){
        if(sequence[i]=='A'||sequence[i]=='C'||sequence[i]=='G'||sequence[i]=='T');
        else return 0;
        i++;
    }
    return 1;
}

void getComplementaryStrand(char complementary[SIZE],char sequence[SIZE]){
    int j=strlen(sequence)-1,i;
    for(i=0;sequence[i];i++,j--){
        if(sequence[i]=='A') sequence[j]='T';
        else if(sequence[i]=='C') sequence[j]='G';
        else if(sequence[i]=='G') sequence[j]='C';
        else sequence[j]='A';
    }
    complementary[strlen(sequence)]='\0';
}

但是,这是我运行程序时得到的:

Enter a DNA Strand
CGCTC
1
╠╠╠╠╠
Press any key to continue . . .

这是我第一次使用函数,所以我不确定我在这里做错了什么。非常感谢帮助,但在我的理解范围内,即非常非常基本。

4

3 回答 3

2

您需要在调用函数getComplementaryStrand的源文件的顶部添加函数的原型。

在源文件的顶部添加这一行:

void getComplementaryStrand(char complementary[SIZE],char sequence[SIZE]);

编辑:与此同时,问题发生了变化……在编译错误之前。OP请提出一个新问题,而不是用一个新问题编辑您的原始问题。

于 2012-05-05T15:40:42.490 回答
1

除了结束字符之外,您永远不会在互补字符串getComplementaryStrand()中填写任何内容。所以你会得到垃圾。

于 2012-05-05T16:03:49.537 回答
1

仔细查看getComplementaryStrand()函数中的 for 循环。您是否将值分配给正确的字符串?我想不是。

于 2012-05-05T16:06:39.490 回答