C言語ケーススタディ アミノ酸配列表記の変換




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



 アミノ酸塩基配列は、1文字の英文字で表現されます(たとえば、AならばAlanine、RならばArginine)。 今回は、この1文字表記をAla、Argなどの3文字表記に変換して表示します。
アミノ酸配列の対応は以下のようになっています。
Ala     A       Alanine
Arg     R       Arginine
Asn     N       Asparagine
Asp     D       Aspartic acid (Aspartate)
Cys     C       Cysteine
Gln     Q       Glutamine
Glu     E       Glutamic acid (Glutamate)
Gly     G       Glycine
His     H       Histidine
Ile     I       Isoleucine
Leu     L       Leucine
Lys     K       Lysine
Met     M       Methionine
Phe     F       Phenylalanine
Pro     P       Proline
Ser     S       Serine
Thr     T       Threonine
Trp     W       Tryptophan
Tyr     Y       Tyrosine
Val     V       Valine
Asx     B       Aspartic acid or Asparagine
Glx     Z       Glutamine or Glutamic acid.
Xaa     X       Any amino acid.

変数aa_strに"Ala"、"Arg"なども文字列をセットします。 セットする順番は、aa_idx配列にセットした順番とします。 また、変換対象の文字列はseq変数に設定しておきます。 seq変数にセットされた文字を先頭から一文字ずつ、aa_idxの内容と比較し一致する場合はaa_strから相当する文字列を取得し表示します。 小文字の場合もあるのでseq内の文字は大文字に変換します。
#include <stdio.h>

char    *aa_str[] = {
                "Ala", "Arg", "Asn", "Asp", "Cys", "Gln", "Glu", "Gly", "His",
                "Ile", "Leu", "Lys", "Met", "Phe", "Pro", "Ser", "Thr", "Trp",
                "Tyr", "Val", "Asx", "Glx", "Xaa"
        };

char    *aa_idx = "ARNDCQEGHILKMFPSTWYVBZX";

main()
{
        char    *seq = "MWQLLLPTALLLLVSAGMRTEDLPKAVVFLEPQWY";
        int     i1;
        char    ch;

        for(;;){
                if(*seq == '\0')
                        break;
                for(i1 = 0; ; i1++){
                        if(aa_idx[i1] == '\0'){
                                printf("***");
                                break;
                        }
                        ch = *seq;
                        if(ch >= 'a' && ch <= 'z'){
                                ch = ch - 'a' + 'A';
                        }
                        if(ch == aa_idx[i1]){
                                printf("%s", aa_str[i1]);
                                break;
                        }
                }
                seq++;
                if(*seq != '\0'){
                        putchar('-');
                }
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...
 このプログラムは、一文字を調べるためにループを使っています。 実用で使う場合には、aa_idxテーブルをもう少し工夫してループがないように変更したほうがよいでしょう(内側のfor文はなくすことができます)。


当サイトのバイオインフォマティクス関連の下記ページも参考にしてください。
バイオインフォマティクス関連オリジナルツールなど
DNA塩基配列から相補配列を生成
塩基配列の翻訳
相補配列の翻訳