2017-02-13 15 views
-1

У меня есть 2 строки. Эти 2 строки могут отличаться по размеру. Я хочу посмотреть на эти две строки, нахожу соответствующие последовательности. Как только я нахожу изменение, я хочу напечатать это слово в «Капитале», а затем продолжить в своей строке, пока не найду другое изменение и так далее. Я не уверен, как бы я это сделал. Я пробовал смотреть на слова в целом, но у меня проблемы с этим. В основном у меня будет 2 строки примерно так: string one="This is a new value" и string two= "This This is a new also brand value «Я хочу, чтобы каждая строка начиналась с начала и находила соответствующие последовательности, например« Это », остановка в строке, которая изменилась с добавлением строки, изменив ее на верхний регистр и затем продолжить. Ожидаемый выход = "THIS this is a new ALSO BRAND value "Соответствие 2 строк в C#

Некоторые кода я пытался. Я не думаю, что это правильный подход.

static void Main(string[] args) 
     { 
      string one = "This is a new value"; 
      string two = "This This is a new also brand value"; 

      var coll = two.Split(' ').Select(p => one.Contains(p) ? p : p.ToUpperInvariant()); 

      Console.WriteLine(string.Join(" ", coll)); 
      Console.ReadKey(); 
     } 
+0

В первом примере строки 1 = «Это текст один» и строка 2 = «Это строковый текст, два не строковый», каков ваш ожидаемый вывод - «Это текст STRING, не являющийся STRING one», или «This STRING TEXT TWO NOT STRING ONE ". Каким будет ваш ожидаемый результат, если две строки были заменены? – PaulF

+0

Я бы предложил прочитать некоторые алгоритмы, такие как jaro-winkler https://en.m.wikipedia.org/wiki/Jaro-Winkler_distance –

+0

@PaulF вторым примером является то, чего я ожидал бы. –

ответ

1

Это вы что искали? Описание не фантастическое, но, судя по ответам, это похоже на один и тот же этап, и он использует LINQ для меньшего количества кода и сложности.

class Program 
{ 
    static void Main(string[] args) 
    { 
     string one = "This is text one"; 
     string two = "This is string text two not string one"; 

     var coll = two.Split(' ').Select(p => one.Contains(p) ? p : p.ToUpperInvariant()); 

     Console.WriteLine(string.Join(" ", coll)); // This is STRING text TWO NOT STRING one 
     Console.ReadKey(); 
    } 
} 

Вы можете разбить это на отдельный метод и передать переменные в качестве параметров.

+0

Это, кажется, сделало трюк :) –

+0

Это единственные слова, если добавлено одно слово, например одно =« это новое слово «два», это также новое слово «output». Это ТАКЖЕ новое слово ». Это слово прекрасно, но если у меня есть другое слово, то после этого оно работает неправильно. Я хочу два «это слово также является новым» выходом »это слово ALSO BRAND new» –

+0

Я не могу воспроизвести эту проблему с кодом, который я опубликовал, 'string one =" это новое слово "; строка два = «это слово также совершенно новое»; // Вывод "это слово ТАКЖЕ БРЕНД новый" ' – ColinM

0

Вы можете преобразовать строку в массив символов и сравнить CHARS один за другим. Вы можете использовать следующий код, я думаю.

string one = "this is string one"; 
     string two = "this is string one or two"; 


     char[] oneChar = one.ToCharArray(); 
     char[] twoChar = two.ToCharArray(); 
     int index = 0; 
     List<char> Diff = new List<char>(); 

     if (oneChar.Length > twoChar.Length) 
     { 
      foreach (char item in twoChar) 
      { 
       if (item != oneChar[index]) 
        Diff.Add(item); 

       index++; 
      } 

      for (int i = index; i < oneChar.Length; i++) 
      { 
       Diff.Add(oneChar[i]); 
      } 
     } 
     else if (oneChar.Length < twoChar.Length) 
     { 
      foreach (char item in oneChar) 
      { 
       if (item != twoChar[index]) 
        Diff.Add(twoChar[index]); 

       index++; 
      } 

      for (int i = index; i < twoChar.Length; i++) 
      { 
       Diff.Add(twoChar[i]); 
      } 
     } 
     else//equal length 
     { 
      foreach (char item in twoChar) 
      { 
       if (item != oneChar[index]) 
        Diff.Add(item); 
      } 
     } 

     Console.WriteLine(Diff.ToArray());//" or two" 
+0

Я хочу вывести что-то вроде этого 'value1 =" Это новое значение ";' 'value2 =" Это также новое значение ";' 'output =" Это ТАКЖЕ новое значение "' –

+0

Теперь ваш вопрос означает намного больше. Во-первых, вы должны найти разницу в качестве описательной и toUpper разницы. 'if (item! = oneChar [index]) item.toUpper();' Но вам нужно быть осторожным, потому что символ разницы может быть уже верхним символом. Если это может произойти в вашем случае, это будет проблемой. – Tugberk

+0

Да, я не очень хорошо описывал свои вопросы. Это может произойти, когда разница уже может быть верхним символом. Не могли бы вы привести мне пример того, как я могу это сделать? –

0

Это то, что вам нужно? (Обновлено)

var value1 = "This is a new Value"; 
var value2 = "This is also a new value"; 
var separators = new[] { " " }; 
var value1Split = value1.Split(separators, StringSplitOptions.None); 
var value2Split = value2.Split(separators, StringSplitOptions.None); 
var result = new List<string>(); 
var i = 0; 
var j = 0; 
while (i < value1Split.Length && j < value2Split.Length) 
{ 
    if (value1Split[i].Equals(value2Split[j], StringComparison.OrdinalIgnoreCase)) 
    { 
     result.Add(value2Split[j]); 
     i++; 
     j++; 
    } 
    else 
    { 
     result.Add(value2Split[j].ToUpper()); 
     j++; 
    } 
} 
Console.WriteLine(string.Join(" ", result)); 
Console.ReadKey(); 

Обратите внимание, что если для value1="This is a new Value" и value2="This is also a new value" выход должен быть "This is ALSO a new value" чем для value1="This is text one" и value2="This is string text two not string one" выход будет "This is STRING text TWO NOT STRING one", не "This is STRING TEXT TWO NOT STRING ONE", как вы упомянули ранее.

+0

Это почти то, что я хочу. например 'value1 =" Это новое значение ";' 'value2 =" Это также новое значение ";' 'output =" Это ТАКЖЕ новое значение "' –

+0

ответ обновлен. теперь нормально? – Pavlo

+0

Вы приближаетесь. но когда я ставлю value1 = «Это новое значение» value2 = «Это также новостное значение», результат должен быть «value2 =« Это ТАКЖЕ значение НОВОСТИ », однако я вместо этого говорю« Это ТАКЖЕ НОВОСТИ VALUE " –

Смежные вопросы