首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DNA到蛋白质-c结构的转换问题

DNA到蛋白质-c结构的转换问题
EN

Stack Overflow用户
提问于 2012-10-25 00:48:40
回答 2查看 342关注 0票数 1

我的工作是将DNA序列转换为蛋白质序列。

我已经完成了所有的程序,只有一个错误,我发现有结构。

dna_codon是一个结构,我在it.In的第一次迭代中迭代,它显示了结构的正确值,但从下一次迭代开始,它没有显示存储在结构中的正确值。

这是一个小错误,所以不要认为我没有做任何事情,并投下赞成票。我被困在这里是因为我对c结构是新手。

代码:

代码语言:javascript
复制
#include <stdio.h>  
#include<string.h>


void main()
{

int i, len;
char short_codons[20];
char short_slc[1000];
char sequence[1000];

struct codons
{
    char amino_acid[20], slc[20], dna_codon[40];
};

struct codons c1 [20]= {
                        {"Isoleucine", "I", "ATT, ATC, ATA"},
                        {"Leucine", "L", "CTT, CTC, CTA, CTG, TTA, TTG"},
                        {"Valine", "V", "GTT, GTC, GTA, GTG"},
                        {"Phenylalanine", "F", "TTT, TTC"},
                        {"Methionine", "M", "ATG"},
                        {"Cysteine", "C", "TGT, TGC"},
                        {"Alanine", "A", "GCT, GCC, GCA, GCG"},
                        {"Proline", "P", "CCT, CCC, CCA,CCG "},
                        {"Threonine", "T", "ACT, ACC, ACA, ACG"},
                        {"Serine", "S", "TCT, TCC, TCA, TCG, AGT, AGC"},
                        {"Tyrosine", "Y", "TAT, TAC"},
                         {"Tryptophan", "W", "TGG"},
                        {"Glutamine", "Q", "CAA, CAG"},
                        {"Aspargine","N" "AAT, AAC"},
                        {"Histidine", "H", "CAT, CAC"},
                        {"Glutamic acid", "E", "GAA, GAG"},
                        {"Aspartic acid", "D", "GAT, GAC"},
                        {"Lysine", "K", "AAA, AAG"},
                        {"Arginine", "R", "CGT, CGC, CGA, CGG, AGA, AGG"},
                        {"Stop codons", "Stop", "AA, TAG, TGA"}
                        };


int count = 0;

printf("Enter the sequence: ");
gets(sequence);

char *input_string = sequence;
char *tmp_str = input_string;

int k;
char *pch;

while (*input_string != '\0')
{
    char string_3l[4] = {'\0'};
    strncpy(string_3l, input_string, 3);
    printf("\n-----------%s & %s----------", string_3l, tmp_str );
    for(k=0;k<20;k++)
    {
        //printf("@REAL -  %s", c1[0].dna_codon);
        printf("@ %s", c1[k].dna_codon);
        int x;
        x = c1[k].dna_codon;
        pch = strtok(x, ",");
        while (pch != NULL)
        {
            printf("\n%d : %s with %s", k, string_3l, pch);
            count=strcmp(string_3l, pch);
            if(count==0)
            {
                strcat(short_slc, c1[k].slc);
                printf("\n==>%s", short_slc);
            }
        pch = strtok (NULL, " ,.-");
        }
    }
input_string = input_string+3;
}

printf("\nProtien sequence is : %s\n", short_slc);
}

输入:

代码语言:javascript
复制
TAGTAG

输出:

如果您看到以下输出

代码语言:javascript
复制
printf("\n-----------%s & %s----------", string_3l, tmp_str );   

在两次迭代中,我们发现structure中定义的值都减少了。

我想知道为什么结构会降低它,还是这是我的错误?因为我被困在这里

需要的输出:

代码语言:javascript
复制
StopStop
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-25 00:57:43

strtok()只能在重复的字符串副本上使用,因为它会在必要时使用'\0‘覆盖“分隔符”以生成标记。

下面的代码将截断该字符串:

代码语言:javascript
复制
x = c1[k].dna_codon;
pch = strtok(x, ",");

例如:

String = "CTT, CTC, CTA, CTG, TTA, TTG"

在第一次strtok()调用a '\0‘覆盖',’

String = "CTT"\0" CTC, CTA, CTG, TTA, TTG"正在截断字符串。添加'\0‘是为了提高可读性。

在第二次循环期间,字符串将仅为:

String = "CTT"

PS:为了提高性能,如果可行的话,您可以使用字符串数组来代替dna_codon[40]或链表。

IEEE Std 1003.1-2008 strtok()

票数 2
EN

Stack Overflow用户

发布于 2012-10-25 01:09:12

虽然我不知道你想要什么样的输出。但是如果直接运行你的代码,我会得到一个段错误。

  1. 从不使用gets()。这一点非常重要。改用fgets()。你可以写fgets(sequence, 1000, stdin).
  2. There与x无关,当strtok修改dna_codon时。没有什么可以从外部阻止strtok
  3. 如果你想拆分dna_codon但又不想修改它,你应该复制一份string。使用strcpy(char*,char*)。这将生成一个真实的副本(两个字符串)。如果你只是将字符串赋值给另一个变量。它们只是两个指向同一个字符串的指针。

char x40;strcpy(x,c1k.dna_codon);//而不是x= dna_codon

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13053843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档