所以我有一个字符串,我分成两半。现在我需要比较字符串的两个部分,输出必须是两个部分中相同的所有元素。
我注意到有些人使用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。
任何帮助都将不胜感激。
答案 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)