比较2个字符串c#

时间:2015-08-31 17:31:32

标签: c# string compare

所以我有一个字符串,我分成两半。现在我需要比较字符串的两个部分,输出必须是两个部分中相同的所有元素。


我注意到有些人使用Intersect,但我不知道为什么它对我不起作用,如果我使用它,我会得到非常奇怪的输出。

所以这是我的代码:

string first= "1 3 6 8 4 11 34 23 3 1 7 22 24 8"
int firstLength = first.Length;
        int half = firstLength / 2;
        string S1 = first.Substring(0, half);
        string  S2= first.Substring(half, half);

        var areInCommon = S1.Intersect(S2);

        Console.WriteLine("Numbers that these 2 strings have in common are: ");
        foreach (int i in areInCommon)
            Console.WriteLine(i);

所以在这种情况下输出将是:1,3和8。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

你很接近你真正想要的是数字的数组而不是字符数组...你可以用split函数得到它。

string first= "1 3 6 8 4 11 34 23 3 1 7 22 24 8"
int firstLength = first.Length;
int half = firstLength / 2;
string S1 = first.Substring(0, half);
string  S2= first.Substring(half, half);

var areInCommon = S1.Split(" ".ToArray()).Intersect(S2.Split(" ".ToArray());

Console.WriteLine("Numbers that these 2 strings have in common are: ");
foreach (var i in areInCommon)
    Console.WriteLine(i);

关于使用ToArray()的说明:

我习惯使用ToArray(),原因是如果你想传递参数,没有这个结构你就无法做到。例如,如果数据如下所示:

 string first= "1, 3, 6, 8, 4, 11, 34, 23, 3, 1, 7, 22, 24, 8"

然后我们需要使用

 .Split(" ,".ToArray(), StringSplitOptions.RemoveEmptyEntries);

因为这种情况发生了很多,所以我习惯使用.ToArray()。你也可以使用一个新的构造(例如new char [] { ' ', ',' })我发现它更麻烦,但可能稍快一些。

答案 1 :(得分:0)

只需将数组中的字符串拆分,然后使用contains()函数比较两个字符串。

答案 2 :(得分:0)

string实现了IEnumerable<char>,因此,你是交叉的字符序列而不是字符串。

您应该使用String.Split

IEnumerable<string> S1 = first.Substring(0, half).Split(' ');
IEnumerable<string> S2= first.Substring(half, half).Split(' ');

然后您的交叉点将输出所需的结果。

此外,您可以将数字的每个字符串表示形式转换为整数(即​​int):

IEnumerable<int> S1 = first.Substring(0, half).Split(' ').Select(s => int.Parse(s));
IEnumerable<int> S2 = first.Substring(half, half).Split(' ').Select(s => int.Parse(s));

答案 3 :(得分:0)

您正在将所有字符转换为整数。字符“1”不是由整数1表示。将foreach更改为:

foreach (char i in areInCommon)