2015-11-23 2 views
-2

Для начала у меня есть фраза, как ice z comp. В выходных данных мне нужно List<string>, которые имеют это слово с тиром, например, как это: ice-z comp, ice z-comp, ice-z-compЗамена слова разными способами

Теперь у меня есть это:

var synonymFromSynonym = new List<string>(); 
var countOfSpaces = word.Count(Char.IsWhiteSpace); 
for (int x = 0; x < countOfSpaces; x++) 
{ 
    // What here for my output ? 
} 
+2

Вот алгоритм: (1) Найти положение всех пространств в строке; (2) Прокрутите все числа от 0 до '2^n', с' n 'количеством пробелов; (3) Рассмотрим каждый такой номер, как набор флагов, бит 'i'th указывает, следует ли заменить пространство' i'th тире или нет. – CompuChip

ответ

0

Проблема может быть решена с помощью следующей реализации. Во-первых, вход разделяется на отдельные слова.

var Words = word.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToArray(); 

Затем слова собираются снова, учитывая два случая, в частности ли соединение сделано с пробелом или дефисом. Это можно сделать рекурсивно следующим образом, когда вызов, такой как GenerateResult("", 0), начнет вычисление.

List<string> Result = new List<string>(); 

void GenerateResult(string Intermediate, int Position) 
{ 
    if (Position == Words.Count() - 1) // base case, nothing to append 
    { 
     Result.Add(Intermadiate); 
    } 
    else 
    { 
     GenerateResult(Intermediate + " ", Position + 1); // space case 
     GenerateResult(Intermediate + "-", Position + 1); // hyphen case 
    } 
} 
Смежные вопросы