Автор: Daniyar91
Дата сообщения: 24.02.2016 17:33
AlexDessar
Если что, то эта тема про C/C++ а не C#.
И второе, поскольку ты, возможно, не в состоянии написать код соответствующий поставленной задаче, то можно предположить, что тот код который ты там написал, не отражает действительности. И так как ты не сказал что именно тебе нужно сделать с этими строками, то я додумал за тебя, и вот что вышло, но не уверен, что тебе именно это нужно.
[more=Код]Тут специально нет никаких проверок на действительность аргументов, так сделано для ясности кода.
И еще, "Какой-либо текст".Contains("") == true поэтому если есть пустые строки, то возможно функция не правильно отработает.
Код: using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1 {
class Program {
static void Main() {
var first = new[] { "12", "34", "56", "78", "90", "439" };
var second = new[] { "1", "6", "123", "456", "43", "347", "39" };
var q = Do(first, second); // q[0] = { "78", "90" }
// q[1] = { }
}
static List<string>[] Do(string[] first, string[] second) {
var set1 = new List<int>[2]; // индексы строк, для которых не нашлось подстрок.
var subStrings = new List<int>[2]; // индексы срок, которые являются подстроками.
for (int i = 0; i < 2; i++) {
set1[i] = new List<int>();
subStrings[i] = new List<int>();
}
var temp = new[] { first, second };
for (int L = 0, R = 1; L < 2; L++, R--) { // Здесь "меняем местами" массивы first и second.
for (int i = 0; i < temp[L].Length; i++) {
var allowLeft = false; // true -- строка из массива L, не содержит подстрок из массива R
for (var j = 0; j < temp[R].Length; j++) {
if (!temp[L][i].Contains(temp[R][j])) { allowLeft = true; }
else { // Найдена подстрока
allowLeft = false;
subStrings[R].Add(j);
j++;
for (; j < temp[R].Length; j++) { // Ищем еще подстроки.
if (temp[L][i].Contains(temp[R][j])) { subStrings[R].Add(j); }
}
break;
}
}
if (allowLeft) { set1[L].Add(i); }
}
}
var result = new List<string>[2];
for (var i = 0; i < 2; i++) {
result[i] = new List<string>();
foreach (var idx in set1[i].Except(subStrings[i])) result[i].Add(temp[i][idx]);
}
return result;
}
}
}