替换4个不同的字符

Replace 4 different characters

我正在尝试接受用户输入,E.G. ATCG 并将字母替换为 TAGC。这些是 DNA 互补碱基。例如,如果用户输入 ATCGGGC,它将输出 TAGCCCG。我已经成功替换了 1 个字符,但我不确定如何替换其他字符。

namespace DNA_Replication_EASY
{
    class Program
    {

        static string input1;


        public static string InputBaseWithSpaces()
        {
            return string.Join(" ", input1.ToCharArray());
        }

        public static string OpposingBases()
        {
            string outputBases1 = input1.Replace("A", "T");
            return outputBases1;
        }

        static void Main(string[] args)
        {

            Console.WriteLine("Please type out your DNA strand bases E.g. A T C G C A T G");
            input1 = Console.ReadLine();
            Console.WriteLine(InputBaseWithSpaces());
            Console.WriteLine(OpposingBases());

            Console.ReadLine();
        }
    }
}

我会在您的字符数组上使用 foreach 和 switch 语句来替换每个字母。

foreach (char base in strand)
{
    switch (base.ToString())
    {
        case "g":
            //replace code
            break;
        case "c":
            //replace code
            break;
    }
}

一种方法是使用 Switch 语句

public static string OpposingBases()
    {
        string outputBases1;
        foreach(var s in input1)
        {            
          switch (s)
          {
            case "A":
              outputBases1 +="T";
              break;
            case "T":
              outputBases1 +="A";
              break;
            case "C":
              outputBases1 +="G";
              break;
            case "G":
              outputBases1 +="C";
              break;
            case " ":
              outputBases1 +=" ";
              break;
            default:
              break;
          }
         }
        return outputBases1;
    }

您应该编写一个例程来逐个字符地进行替换(不要使用 string.replace 方法)。

private string ConvertDNA(string original)
{
        StringBuilder newone = new StringBuilder();
        foreach(char c in original)
        {
            switch(c)
            {
                case 'A':
                    newone.Append('T');
                    break;
                case 'T':
                    newone.Append('A');
                    break;
                case 'C':
                    newone.Append('G');
                    break;
                case 'G':
                    newone.Append('C');
                    break;
                default:
                    newone.Append(c);
                    break;
            }       
        }
        return newone.ToString();
}

请注意,如果您的原始字符串是某些形式的 Unicode,这可能会产生一些有趣的结果。您应该在其他答案中使用 stringbuilder 而不是 += 语法,因为它更有效。

使用Regex.Replace根据字典(映射)替换字符串:

Dictionary<string, string> complementary = new Dictionary<string,string>()
{
    { "A", "T" },
    { "T", "A" },
    { "C", "G" },
    { "G", "C" }

};
string input = "ATCG";
string result = Regex.Replace(input, "[ATCG]", match => complementary[match.Value]);

这会用字典中的相应值替换任何 "ATCG" 字符匹配项。

string MakeOpposite(string sourceString) {
    var opposites = new Dictionary<char, char> {
        { 'A', 'T' },
        { 'T', 'A' },
        { 'G', 'C' },
        { 'C', 'G' }
    };
    var oppositeString = new string(sourceString.Select(x => opposites[x]));
    return oppositeString;
}

简单的解决方案,但您可以做得更好:

code = code.Replace("A","x").Replace("C","y").Replace("T","A").Replace("G","C").Replace("x","T").Replace("y","G");

将其转换为字符数组并原地替换

string  input = "ATCG";
//TAGC

char[] inputChar = input.ToCharArray();

for(int i=0;i< inputChar.Length; i++)
{
    switch(inputChar[i])
    {
        case 'A':
            inputChar[i]='T';
            break;
        case 'T':
            inputChar[i]='A';
            break;
        case 'G':
            inputChar[i]='C';
            break;
        case 'C':
            inputChar[i]='G';
            break;
    }
}
var output =new string(inputChar);

你可以这样做

    public static string OpposingBases()
    {
        var baseDictionary = new Dictionary<char, char>()
        {
            {'A', 'T'},
            {'T', 'A'},
            {'C', 'G'},
            {'G', 'C'}
        };
        return input1.Where(baseDictionary.ContainsKey).Aggregate("", (current, c) => current + baseDictionary[c]);
    }