0

私は、DNAの「相補的な」鎖を計算するだけの関数を書いています。つまり、CをGに、TをAに置き換えるということです。

これは私が書いたものです:

#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

関数内の for ループを注意深く見てくださいgetComplementaryStrand()。正しい文字列に値を割り当てていますか? ないと思います。

于 2012-05-05T16:06:39.490 に答える