将2个字符串转换为char数组并将它们作为字符进行比较

时间:2014-01-11 01:56:48

标签: c#

我有两个名为sln和csln的字符串变量,我想将它们转换为char数组,然后比较它们之间使用的字符

        string value = sln;
        char[] X = value.ToCharArray();
        string valueY = csln;
        char[] Y = valueY.ToCharArray();

由于某种原因,我不明白为什么它不起作用

比较他们使用

        if (X.SequenceEqual(Y))
        {
        }

但要检查这是否有效,第一个必须正常工作,我必须将它们转换为字符,我必须将X的每个字符与Y的相应字符进行比较,以使这两个数组的相似性达到百分比,请帮忙

4 个答案:

答案 0 :(得分:0)

例如,如果您想检查每个字符

,您可以通过这种方式比较数组
string value = "assdf";
char[] X = value.ToCharArray();
string valueY = "assdf";
char[] Y = valueY.ToCharArray();

if (X.Count() == Y.Count())
{
    int arrayLenght = X.Count();
    Console.WriteLine("Ok, Array is same lenght ... lets check the content");

    for (int i = 0; i < arrayLenght; i++)
    {
        if (X[i] != Y[i])
        {
            Console.WriteLine("Not the same array!");
        }
    }
}
else
{
    Console.WriteLine("Array is not equal in lenght");
}

Console.ReadKey();

答案 1 :(得分:0)

一般来说,在.NET中会有很长的路要走 - 字符串实际上是char []。因此,不要将字符串转换为char数组,只需访问它们就像它们是一个数组一样(因为它们是)。

这是吉姆的例子被修改为使用这个概念......

string valueX = "assdf";
string valueY = "assdf";

if (valueX.Length == valueY.Length)
{
    Console.WriteLine("Ok, Array is same lenght ... lets check the content");

    for (int i = 0; i < valueX.Length; i++)
    {
        if (valueX[i] != valueY[i])
        {
            Console.WriteLine("Not the same array!");
        }
    }
}
else
{
    Console.WriteLine("Array is not equal in lenght");
}

此外,如果您没有具体说明如何进行比较,string.Equal会让您陷入麻烦。区分大小写,文化敏感?阅读本文以获取更多信息...

http://msdn.microsoft.com/en-us/library/c64xh8f9(v=vs.110).aspx

因为听起来你正在寻找LCS(最长公共子串)或Levenshtein距离算法,所以看一下......

http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#C.23

答案 2 :(得分:0)

看起来你需要在每个字符串中匹配值和位置的字符数。因此,可以Zip将字符串组合在一起,而不是计算相同字符的Tuple

 var same = sln.Zip(csln, (c1,c2)=> Tuple.Create(c1,c2))
    .Where(t => t.Item1 == t.Item2)
    .Count();
 var percentage = 100.0 * same / sln.Count();

请注意,要计算百分比,您需要将至少一个元素强制转换为float,否则对于匹配数量较少的长字符串(200个中的1个),您可能会得到0。

答案 3 :(得分:0)

现在我们折磨你的时间已经足够长,无法发现你的任务,我可以给你答案。

根本不需要将字符串转换为字符数组,因为字符串本身提供了模仿这种数组的接口。

static void Main(string[] args)
{
    string a = Console.ReadLine();
    string b = Console.ReadLine();

    int max = Math.Max(a.Length, b.Length);
    int min = Math.Min(a.Length, b.Length);

    // dividing integer by integer will return integer
    // therefore durign division you need to indicate need for floating point value
    // or just use float type, cheap trick, but it works just as well and makes code cleaner
    float c = 0;

    // for each character up to end of shorter string
    for (int i=0; i<min; i++)
    {
        // compare them
        if (a[i] == b[i])
        {
            // and if equal, increase counter
            c++;
        }
    }

    Console.WriteLine("Similarity is {0:P}", c / max);
    Console.ReadLine();
}