C# 如何在c中替换字符串中的字符#

C# 如何在c中替换字符串中的字符#,c#,string,replace,non-repetitive,C#,String,Replace,Non Repetitive,所以标题可能有点误导,但请听我说。它不像我在标题中说的那么简单 所以我要说的是 String dna="ACTG"; 我必须把这个字符串转换成它的补码形式。为了补充所说的字符串,我必须将所有出现的“A”替换为“T”,“C”替换为“G”,“T”替换为“A”,“G”替换为“C”。所以字符串的补码应该如下所示: String dnaComplement="TGAC"; 我如何正确地做到这一点?例如 String temp = dna.Replace("A", "T"); temp = temp.R

所以标题可能有点误导,但请听我说。它不像我在标题中说的那么简单

所以我要说的是

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#的初学者,我对使用C#编程略知一二。我习惯于使用java。

替换为唯一的标记,例如-->l,T-->m C-->n G-->o。现在,您可以在不更改任何其他标记的情况下替换每个标记-因此L-->T等。

类似于:

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

foreach(char c in dna)
{
  if (c == 'A') dnaComplement += 'T';
  else if (c == 'C') dnaComplement += 'G';
 // and so long
}

首先将字符更改为其他字符

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
// ...

您可以使用补语词典,然后使用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));
var complements=新字典
{
{'A','T'},
{'C','G'},
{'G','C'},
{'T','A'},
};
var original=“TGAC”;
var transformated=string.Concat(original.Select(c=>(complements.ContainsKey(c))?complements[c]:c));

上面的每一个答案都是正确的,解决了你的问题,但是如果你经常做很多替换,考虑使用A。每次调用时返回一个新的字符串实例,旧实例将变成垃圾并必须收集。这可能会导致您的应用程序性能下降。

我会这样做:

var complement = dna.Select(c =>
{
    switch (c)
    {
        case 'A': return 'T';
        case 'T': return 'A';
        case 'C': return 'G';
        case 'G': return 'C';
        default: throw new ArgumentException(); // or whatever
    }
});
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());
编辑:这样你就得到了一个
IEnumerbale
。要将其转换回字符串,请参见。

我将执行以下操作:

var complement = dna.Select(c =>
{
    switch (c)
    {
        case 'A': return 'T';
        case 'T': return 'A';
        case 'C': return 'G';
        case 'G': return 'C';
        default: throw new ArgumentException(); // or whatever
    }
});
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());
var complements=新字典
{
{'A','T'},
{'C','G'},
{'G','C'},
{'T','A'},
};
字符串dna=“ACTG”;
字符串DNA补全=
新字符串(
脱氧核糖核酸
.ToCharArray()
.选择(x=>补足[x])
.ToArray());

正如Michal Hosala所说,你必须弄清楚补语的定义。 我假设您将字符串分成两个相等的部分,第一个字符串中的第一个字符是第二个字符串中第一个字符的补码

我还处理了当字符数为奇数时,“ACXTG”的补码将是“TGXAC”

string dna=“ACTG”;
字符串dnaComplement=“”;
如果(dna.Length%2==1)
dna补体+=dna[dna.Length/2];
对于(int i=0;i
如何定义补语?i、 除了定义为A、T、C、G之外,你还有其他字母的补全符吗?因为你不能编写简单的初学者作业,所以现在是“高级”了?天啊。请现实一点。这个问题是正确的,但一点也不高级。迈克尔,它们是构成DNA的碱基对。所以这个字母表只有4个字母。配对是DNA在细胞分裂过程中复制的方式。
+=
每次都复制字符串,这可能会导致效率问题。