Нормальный алгорифм Маркова
Возникла проблема с реализацией нормального алгоритма Маркова в С#. Задание: A={a,b,c}. Из слова P удалить второй символ, если такой есть. Сам алгоритм я записала так:
- *a|->a^
- ^a|->
- *b|->b^
- ^b|->
- *c|->c^
- ^c|->
- *|->
- ->*
При попытке использования готовых функций в С# ничего не выходит :(
У кого есть возможность помогите, пожалуйста :)
string word = Console.ReadLine();
string temp = word.Insert(0, new string('*', 1));
if (temp.Contains("*a"))
{
temp.Replace("*a", "a^");
temp.Replace("a^", "");
}
else if (temp.Contains("*b"))
{
temp.Replace("*b", "b^");
temp.Replace("b^", "");
}
else if (temp.Contains("*c"))
{
temp.Replace("*c", "c^");
temp.Replace("c^", "");
}
else Console.WriteLine("Слово пустое!");
Ответы (2 шт):
Автор решения: aepot
→ Ссылка
Удобнее было бы использовать словать Dictionary и цикл его перебора. Я ничего не знаю про этот алгоритм, но попробую догадаться, чего вы бы хотели достичь.
Вот сделал с примером из Википедии.
- 1 → 0|
- |0 → 0||
- 0 → ""
Как реализовать с вашим словарем, не знаю, потому что не понятно, что должен делать последний его элемент.
static void Main(string[] args)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>
{
{ "1", "0|" },
{ "|0", "0||" },
{ "0", "" }
};
Console.Write("Введите слово: ");
string word = Console.ReadLine();
if (word.Length == 0)
{
Console.WriteLine("Слово пустое");
}
else
{
bool found;
do
{
found = false;
// перебираем словарь с использованием пары ключ-значение
foreach (KeyValuePair<string, string> pair in dictionary)
{
if (word.Contains(pair.Key))
{
found = true;
int position = word.IndexOf(pair.Key);
word = word.Remove(position, pair.Key.Length);
word = word.Insert(position, pair.Value);
break;
}
}
}
while (found); // повторяем перебор, пока есть совпадения
Console.WriteLine("Результат: {0}", word);
}
Console.ReadKey();
}
Автор решения: Odin LaVoie
→ Ссылка
Если |-> это исполнение и стоп, то Сам алгоритм работать не будет. Может быть так?
*a->a^; *b->b^; *c->c^; ^a|-> ; ^b|-> ; ^c|-> ; *|-> ; ^|-> ; ->*