0

我是 c 编程的新手,所以我不理解为这个过程工作。

我有一个定义如下方式的结构。

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

struct codons c1 = {"Isoleucine", "I", "ATT, ATC, ATA"};
struct codons c2 = {"Leucine", "L", "CTT, CTC, CTA, CTG, TTA, TTG"};

用户必须输入字符串序列。例如 :

printf("Enter the sentence: ");
gets(str);

如果用户输入如下字符串:

ATTCTGCTTTTA

然后我必须将此字符串转换为 3char 长度的字符串,例如

ATT, CTG, CTT, etc.   

然后,我必须检查这个由 3 个字符组成的短字符串是否存在于 not 的结构中。

我不知道如何将字符串转换为 3char 字符串长度并进行检查。
谁能给我一些建议?

4

2 回答 2

3

要获取字符串的前 3 个字符,只需分配一个该大小的缓冲区并将这些字符放在那里:

char substring[4];
strncpy(substring, input, 3);
char substring[3] = '\0';

然后使用 strstr 检查字符串 "possibilities" 是否包含子字符串:

if (strstr(possibilities, substring) != NULL)
    // ...

(您没有像评论所说的那样发布结构定义,所以我不能更准确地了解“可能性”的真实名称)

如果你想继续,只需做一些指针运算并重复所有过程:

strncpy(substring, input + 3, 3)
// and so on...

(哈哈,我读过“避孕套”)

于 2012-10-24T12:18:08.137 回答
2

您可以执行以下操作:

char* input_string = ...;

//check if user entered string that could be divided into 3 letters substrings
if (strlen(input_string) % 3 != 0)
  return;

while (*input_string != '\0')
{
   char string_3l[4] = {'\0'};
   strncpy(string_3l, input_string, 3);

   //check if string_3l is part of structure 
   if ((strstr(string_3l, c1.dna_codon) != NULL) || 
               (strstr(string_3l, c2.dna_codon) != NULL))
   {
        //YOU HAVE MATCH!
   }

   input_string += 3;
}

当然,您应该同时检查 c1 和 c2 结构。

于 2012-10-24T12:31:41.200 回答