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在细胞分裂过程中复制的方式。+=
每次都复制字符串,这可能会导致效率问题。