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

次に、この文字列を次のような3文字の長さの文字列に変換する必要があります

ATT, CTG, CTT, etc.   

次に、この3文字の短い文字列がnotの構造に存在するかどうかを確認する必要があります。

文字列を3文字の文字列の長さに変換して確認する方法がわかりません。
誰かが私に何かを提案できますか?

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 に答える