Замена слово сочетания в строке на другое словосочетание - C#

Узнай цену своей работы

Формулировка задачи:

Добрых времени суток. Есть List<string> со строками. В строках находится n-е количество одинаковых слово сочетаний разделенных текстом, нужно заменить только 1е встретившиеся словосочетание не трогая другие на другие слово сочетания, которые находятся в листбоксе. Например:
Лук темных эльфов авпваплдвапьвдюбждбфджвбфвжд Лук темных эльфов
Кристальный меч ошдавыьдыавыштльщфышщвфыроу Кристальный меч 
Меч демона апзлщлуцуцзйцусщтамнигупкнгййуйцуйц Меч демона
аловытыаа Клинок богов авоалвиытшаовытш Клинок богов
авыавыталыь Меч императора лдаатдвыаыь Меч императора
Заменить на:
Лук темных эльфов (Топ) авпваплдвапьвдюбждбфджвбфвжд Лук темных эльфов
Кристальный меч (Топ) ошдавыьдыавыштльщфышщвфыроу Кристальный меч 
Меч демона (Топ) апзлщлуцуцзйцусщтамнигупкнгййуйцуйц Меч демона
аловытыаа Клинок богов (Топ) авоалвиытшаовытш Клинок богов
авыавыталыь Меч императора (Топ) лдаатдвыаыь Меч императора
При этом вместо слова "Топ" может быть другое, слово сочетание определяется ранее. Пытался сделать так:
for(int i = 0; i < listBox1.Items.Count; i++)
            {
                for (int j = 0; j < listBox1.Items.Count; j++)
                {
                    if (str[i].Contains(Convert.ToString(listBox2.Items[j])))
                        listBox1.Items[i] = str[i].Replace(str[i], listBox2.Items[j] + grade[0]);
                }
            }
Но в итоге строка заменяется целиком

Решение задачи: «Замена слово сочетания в строке на другое словосочетание»

textual
Листинг программы
static void Main(string[] args)
        {
            Dictionary<string, string> replace = new Dictionary<string, string>(); 
            List<String> list = new List<string>();
            list.Add("Лук темных эльфов авпваплдвапьвдюбждбфджвбфвжд Лук темных эльфов");
            list.Add("Кристальный меч ошдавыьдыавыштльщфышщвфыроу Кристальный меч");
            list.Add("Меч демона апзлщлуцуцзйцусщтамнигупкнгййуйцуйц Меч демона");
            list.Add("аловытыаа Клинок богов авоалвиытшаовытш Клинок богов");
            list.Add("авыавыталыь Меч императора лдаатдвыаыь Меч императора");
            replace.Add("Лук темных эльфов", "Лук темных эльфов (Топ)");
            replace.Add("Кристальный меч", "Кристальный меч (Топ)");
            replace.Add("Меч демона", "Меч демона (Топ)");
            replace.Add("Клинок богов", "Клинок богов (Топ)");
            replace.Add("Меч императора", "Меч императора (Топ)");
            for(int i = 0;i<list.Count;i++)
            {
                List<String> str = list[i].Split(' ').ToList();
                List<int[]> f = new List<int[]>();
                for (int j = 0; j < str.Count ; j++)
                    for (int k = j + 1; k < str.Count ; k++)
                    {
                        int t = j, x = j;
                        if (str[j] == str[k] && str.IndexOf(str[j])==j)
                        {
                            while (k<str.Count && str[j++] == str[k++])
                                x++;
                            f.Add(new int[]{t,x });
                            break;
                        }
                    }
                int num = 0;
                string ans = "";
                for (int j = 0;j<str.Count ;j++)
                {
                    if (f[num][0]==j )
                    {
                        string a = "";
                        for (; j < f[num][1]; j++)
                            a +=" " + str[j];
                        if (replace.ContainsKey(a.Trim()))
                            ans +=" " + replace[a.Trim()]; 
                    }
                    ans +=" " + str[j];
                }
                list[i] = ans.Trim();
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы