2

というわけで、ちょっとタイトルがおかしいかもしれませんが、聞いてください。タイトルに書いたほど単純ではありません。

だから私は言う文字列を持っています、

String dna="ACTG";

上記の文字列を補数形式に変換する必要があります。上記の文字列を補完するには、"A" を "T" に、"C" を "G" に、"T" を "A" に、"G" を "C" にすべて置き換える必要があります。したがって、文字列の補数は次のようになります。

String dnaComplement="TGAC";

これを正しく行うにはどうすればよいですか?例えば

String temp = dna.Replace("A", "T");
temp = temp.Replace("T", "A");
temp = temp.Replace("C", "G");
temp = temp.Replace("G", "C");

これにより、次の出力が得られます。

TCTC

これは間違っています。私は C# の初心者で、それを使ったプログラミングについて少し知っています。私はJavaの使用に慣れています。

4

8 に答える 8

4

何かのようなもの:

String dna="ACTG";
String dnaComplement = "";

foreach(char c in dna)
{
  if (c == 'A') dnaComplement += 'T';
  else if (c == 'C') dnaComplement += 'G';
 // and so long
}
于 2014-11-26T09:37:51.227 に答える
2

補数の辞書を使用してから、Linq を使用できますSelect

var complements = new Dictionary<char, char>
    {
        { 'A', 'T' },
        { 'C', 'G' },
        { 'G', 'C' },
        { 'T', 'A' },
    };

var original = "TGAC";
var transformated = string.Concat(original.Select(c => (complements.ContainsKey(c)) ? complements[c] : c));
于 2014-11-26T09:40:19.837 に答える
1

私はこれを行います:

var complements = new Dictionary<char, char>
{
    { 'A', 'T' },
    { 'C', 'G' },
    { 'G', 'C' },
    { 'T', 'A' },
};

string dna = "ACTG";

string dnaComplement =
    new string(
        dna
            .ToCharArray()
            .Select(x => complements[x])
            .ToArray());
于 2014-11-26T10:26:52.520 に答える
0

たとえば、A-->l、T-->m C-->n G-->o のように一意のトークンに置き換えます。これで、他のトークンを変更せずに各トークンを置き換えることができるようになりました。つまり、L-->T などです。

于 2014-11-26T09:34:57.117 に答える
0

Michal Hosala が言ったように、補数の定義を明確にする必要があります。文字列を 2 つの等しい部分に分割し、最初の文字列の最初の文字が 2 番目の文字列の最初の文字の補数であると仮定します。

また、文字数が奇数の場合も扱いました。「ACXTG」の補数は「TGXAC」になります。

string dna = "ACTG";
string dnaComplement = "";

if (dna.Length % 2 == 1)
    dnaComplement += dna[dna.Length / 2];
for (int i = 0; i < dna.Length / 2; i++)
    dnaComplement = dna[dna.Length - i - 1] + dnaComplement + dna[i];
于 2014-11-26T10:32:43.310 に答える
0

最初に文字を別のものに変更します。

String temp = dna.Replace("A", "t");
temp = temp.Replace("T", "A");
temp = temp.Replace("t", "T");
temp = temp.Replace("C", "g");
temp = temp.Replace("G", "C");
temp = temp.Replace("g", "G");

あなたからのこのコード:

String temp = dna.Replace("A", "T"); // A's are changed to T...
temp = temp.Replace("T", "A"); // ... but your just obtained 'T's are changed back to A
// ...
于 2014-11-26T09:38:31.137 に答える
0

上記の各回答は正しく、問題を解決しますが、頻繁に多くの置換を行う場合は、StringBuilderの使用を検討してください。string.Replace()は、呼び出すたびに新しい文字列インスタンスを返します。古いインスタンスはガベージになるため、収集する必要があります。これにより、アプリのパフォーマンスが低下する可能性があります。

于 2014-11-26T09:46:08.960 に答える