電子書籍の厳選無料作品が豊富!

C++の質問です。

A=00,T=01,G=10,C=11
と対応づけて、最終的にはstringの「AGTGTTACCTA」を二進数にしたいのですが、
どのようにするのが最も効率がよいでしょうか。
やはり、最初に一文字ずつ0と1に直してから、くっつけていく方法でしょうか。

ご教授願います。

質問者からの補足コメント

  • 内容が不十分ですみません。
    対応付けさせるものが膨大にあるので、できる限り処理速度が速い方法を知りたいというのが質問の趣旨です。

      補足日時:2015/06/10 09:06

A 回答 (6件)

最初に一文字ずつ0と1に直してから、くっつけていく方法


で良いと思います。

ostringstream o;
string::iterator i = dna.begin();
while (i != dna.end()) {
_ switch(*i++) {
_ _ case 'A': o << "00"; break;
_ _ case 'T': o << "01"; break;
_ _ case 'G': o << "10"; break;
_ _ case 'C': o << "11"; break;
_ }
}
return o.str();
    • good
    • 0
この回答へのお礼

thank you

お礼日時:2015/06/10 12:01

「二進数にしたい」ってのは, 結局どうしたいんでしょうか? 例えば質問文にある


AGTGTTACCTA
だったら, 最終的にどうなっていてほしいんですか?
    • good
    • 1

>最終的にはstringの「AGTGTTACCTA」を二進数にしたい


変換する文字は、”AGTGTTACCTA”と、予め決まっているわけですか?
もし、そうなら、二進数は、”0010011001010011110100”なので、
それが、求める答えになります。
    • good
    • 1

誤解させてすみません。


課題の内容はAGCTを2進数でコード化して 一部を乱数と置き換える 他との一部の入れ替えを行う C++を作成せよ。 です。
    • good
    • 1

補足をお願いします。


結果としてほしいものは何ですか?数値ですか?0と1からなる文字列ですか?
    • good
    • 1

こんな質問して答えを待っているより、



>最初に一文字ずつ0と1に直してから、くっつけていく方法

で作って、さっさと変換を済ませてしまった方が「早い」です。


入力のstringが何GBもあって、それを何百回もくりかえす、というのなら話は違ってきますが。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!