识别那些不同的字符

时间:2018-01-25 15:37:49

标签: c#

我应该编写一个程序来识别字符串对之间的差异,以便人们更容易看到差异。

程序应该以视觉上引人注目的方式识别两个给定字符串之间不同的字符。

在两行上输出两个输入字符串,然后使用句点(对于相同的字符)和星号(对于不同的字符)识别下面一行的差异。

例如:

ATCCGCTTAGAGGGATT
GTCCGTTTAGAAGGTTT
*....*.....*..*..

第一行输入包含一个整数 1≤n≤500,表示随后的测试用例数。每个测试用例是一对相同长度的行,1到50个字符。每个字符串仅包含字母(a-z,A-Z)或数字(0-9)。

但我不能将匹配的字符更改为指针?我能得到一些帮助吗? 而且我真的不明白如何表明测试用例的数量?

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        string s1 = "abcdefg";
            string s2 = "acceeff";

        string s3 = "hbcdfgi";
        string s4 = "hbadehi";

            char[] c1 = s1.ToCharArray();
            char[] c2 = s2.ToCharArray();
            char[] c3 = s3.ToCharArray();
            char[] c4 = s4.ToCharArray();

            var diff = s1.Except(s2);
            string newS1 = s1;
            foreach(var value in diff)
            {
                newS1 = newS1.Replace(value, '*');

            }
        var diff2 = s3.Except(s4);
            string newS2 = s3;
         foreach(var value in diff2)
            {

        newS2 = newS2.Replace(value, '*'); 

            }
        string nr1 = s1 + "\n" + s2;
        string nr2 = s3 + "\n" + s4;

        Console.WriteLine(nr1);
        Console.WriteLine(newS1);
        Console.WriteLine();
        Console.WriteLine(nr2);
        Console.WriteLine(newS2);
        Console.WriteLine();
        }

   }

1 个答案:

答案 0 :(得分:1)

我不知道你是如何存储你的测试用例以便能够对此进行评论的,但基本上只是在测试用例中你需要输出2个值,然后循环其中一个以检查匹配和根据匹配输出正确的字符。

因此,对于每个测试用例(字符串对),您只想做类似的事情:

string s1 = "abcdefg";
string s2 = "acceeff";

// Write each input string to console.
Console.WriteLine(s1);
Console.WriteLine(s2);

// Loop each character and check for match.
for(int i = 0; i < s1.Length; i++)
{
    if(s1[i] == s2[i]) // If match output "."
        Console.Write(".");
    else // otherwise, output "*"
        Console.Write("*");
}

// Write a new line ready for the next test case.
Console.WriteLine();

关于循环测试用例,您基本上需要一个持有字符串的客户类List。例如:

class TestCase
{
    public string S1 { get; set; }
    public string S2 { get; set; }
}

然后您需要以某种方式创建列表(可能从文件或硬编码中读取):

List<TestCase> testCases = new List<TestCase>
{
    new TestCase { S1 = "abcdef", S2 = "abcxyz" },
    new TestCase { S1 = "abc", S2 = "def" }
};

然后你就这样循环:

foreach(var testCase in testCases)
{
    string s1 = testCase.S1;
    string s2 = testCase.S2;

    // Rest of code from above.
}