Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для Python byname
4 / 4 / 2
Регистрация: 06.03.2018
Сообщений: 146

Как вычислить слова из текста после которых идут определенные слова?

18.03.2018, 15:25. Показов 1314. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как показать все слова в тексте после которых идут определенные слова?

Т.е., есть список, например:

Яблоко Фрукт
Кирпич Строительный материал
Апельсин Фрукт

Нужно найти все слова после которых идет слово Фрукт и слова Строительный материал
и показать их без этих слов, разделив по классам, т.е. вот так

Яблоко, Апельсин
Кирпич
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2018, 15:25
Ответы с готовыми решениями:

Вывести только слова, буквы в которых идут в алфавите после букв во введённом ранее слове
Здравствуйте, товарищи программисты. Очень нужна ваша помощь с заданием, которое просто поставило меня в ступор... Суть задания: ...

Как подсчитать строки, в которых есть определенные слова?
Как сделать, что бы подсчитать строки, в которых есть определенные слова, например Warning 16354 '*(&(")&' Warning...

Напечатать те слова текста, которые отличны от последнего слова и в которых буквы упорядочены по алфавиту
Дан текст, состоящий из латинских букв. Между соседними словами – не менее одного пробела; за последним словом – точка. Напечатать те слова...

11
 Аватар для usershen
5 / 5 / 5
Регистрация: 14.03.2018
Сообщений: 28
18.03.2018, 15:46
первый вариант:
C#
1
2
3
4
5
6
7
8
9
10
var spisok = "Яблоко Фрукт
Кирпич Строительный материал
Апельсин Фрукт";
string classFruits = "Фрукт";
string classMaterials = "Строительный материал";
var newSpisok; 
 
foreach (var s in spisok)
      if (s.Contains(classFruits))
           newSpisok += s;
второй - смотри в сторону субстрингов:
C#
1
spisok.Substring(0, classFruits)
если будет вылазить лишний пробел после первого слова, то использовать classFruits - 1

Это подтолкнет на решение, или тебе надо весь код сразу рабочий?
1
189 / 166 / 101
Регистрация: 14.03.2018
Сообщений: 426
18.03.2018, 15:48
Оптимальный вариант - почитать про регулярные выражения, они как раз для такого и созданы.
https://msdn.microsoft.com/ru-... .110).aspx
1
 Аватар для usershen
5 / 5 / 5
Регистрация: 14.03.2018
Сообщений: 28
18.03.2018, 15:54
Ну или да, как написал человек выше, использовать регулярку:

Regex.Replace(spisok, @"Фрукт", String.Empty);
0
 Аватар для Python byname
4 / 4 / 2
Регистрация: 06.03.2018
Сообщений: 146
18.03.2018, 16:18  [ТС]
usershen, вот пытаюсь разобраться с вашим первым примером, но не могу избавиться от ошибок, что-то вы написали не точно, а я со своими познаниями понять не могу как сделать правильно
0
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
18.03.2018, 18:39
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
 
class Program
{
    public static void Main()
    {
        string str = "Опунция индийская Фрукт\n Стол Мебель\n Жидкие гвозди Строительный материал\n Апельсин Фрукт\n Гвозди шиферные Строительный материал";
        ArrayList al = new ArrayList{ "Фрукт", "Строительный материал" };
        Dictionary<string, string> dct = new Dictionary<string, string>();
        foreach (string s in al)
        {
            Regex reg = new Regex(" *([А-Яа-яЁё ]+?) +?(" + s + ")");
            foreach (Match m in reg.Matches(str))
            {
                if(!dct.TryAdd(m.Groups[2].Value, m.Groups[1].Value))
                {
                    dct[m.Groups[2].Value] += (", " + m.Groups[1].Value);
                }
            }
        }
        
        foreach(string s in dct.Values)
        {
            Console.WriteLine(s);
        }
    }
}
0
 Аватар для Python byname
4 / 4 / 2
Регистрация: 06.03.2018
Сообщений: 146
18.03.2018, 22:08  [ТС]
igorrr37, спасибо за ответ, но есть ошибка:
0
 Аватар для usershen
5 / 5 / 5
Регистрация: 14.03.2018
Сообщений: 28
19.03.2018, 00:24
Лучший ответ Сообщение было отмечено Python byname как решение

Решение

Лично проверил, все работает.
Способ детский

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Text.RegularExpressions;
 
 
class Program
{
    public static void Main()
    {
        string spisok = "Яблоко Фрукт Кирпич Строительный материал Апельсин Фрукт";
        string str1 = " Фрукт";
        string str2 = " Строительный материал";
        string result1 =null;
        string result2 =null;
        
        spisok = spisok.Replace(str1, "1"); //заменяем наш класс на единичку
        spisok = spisok.Replace(str2, "2"); //заменяем второй класс на двоечку
        Regex myReg1 = new Regex("\\w*1"); //поиск всего слова перед единичкой до пробела
        Regex myReg2 = new Regex("\\w*2"); //поиск всего слова перед двоечкой до пробела
        MatchCollection matches1 = myReg1.Matches(spisok);
        MatchCollection matches2 = myReg2.Matches(spisok);
 
        foreach (Match m in matches1)
            result1 += m.Value;
        result1 = result1.Replace("1", ", "); //заменяем нашу единичку запятой с пробелом
        if (result1.LastIndexOf(" ") == result1.Length - 1) //проверяем, стоит ли пробел в конце нашей строки 
            result1 = result1.Substring(0, result1.Length - 2); //удаляем пробел
 
        Console.WriteLine(result1);//выводим первую группу
 
       //тут всё аналогично
        foreach (Match m in matches2)
            result2 += m.Value;
        result2 = result2.Replace("2", ", "); 
        if (result2.LastIndexOf(" ") == result2.Length - 1) 
            result2 = result2.Substring(0, result2.Length - 2); 
        Console.WriteLine(result2); //выводим вторую группу
    }
}
PS. igorrr37, у меня такая-же ошибка вылезла, когда пробовал ваш способ
1
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
19.03.2018, 00:32
Цитата Сообщение от usershen Посмотреть сообщение
у меня такая-же ошибка вылезла
Почему ошибка?
1
 Аватар для Python byname
4 / 4 / 2
Регистрация: 06.03.2018
Сообщений: 146
19.03.2018, 11:14  [ТС]
usershen, большое спасибо за столь развернутый ответ с комментариями
Не самый элегантный способ как я понимаю, зато самое оно для моего уровня, 80% написанного я понимаю, остальное догуглю

Добавлено через 10 часов 26 минут
usershen,
C#
1
("\\w*1"); //поиск всего слова перед единичкой до пробела
А если например указано не одно слово Яблоко, а два, например Драконий Фрукт
То тогда в строке выдается только последнее слово Фрукт

Не могу нагуглить на что заменить Regex("\\w*1") чтобы записывалось два или более слова
Не подскажите?[/QUOTE]
0
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
19.03.2018, 11:56
Цитата Сообщение от Python byname Посмотреть сообщение
igorrr37, спасибо за ответ, но есть ошибка:
замените внутренний цикл foreach на такой цикл
C#
1
2
3
4
5
6
7
8
9
10
11
foreach (Match m in reg.Matches(str))
            {
                if(!dct.ContainsKey(m.Groups[2].Value))
                {
                    dct.Add(m.Groups[2].Value, m.Groups[1].Value);
                }
                else
                {
                    dct[m.Groups[2].Value] += (", " + m.Groups[1].Value);
                }
            }
1
 Аватар для usershen
5 / 5 / 5
Регистрация: 14.03.2018
Сообщений: 28
19.03.2018, 16:16
Вот обошелся без регулярных выражений, проверил, всё работает:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
 
 
class Program
{
    public static void Main()
    {
        string spisok = "Яблоко Фрукт Кирпич Строительный материал Апельсин Фрукт Акуна Матата Фрукт";
        string str1 = " Фрукт";
        string str2 = " Строительный материал";
        string result1 = null;
        string result2 = null;
 
        spisok = spisok.Replace(str1, "1;"); //заменяем наш класс на единичку с точкой с запятой
        spisok = spisok.Replace(str2, "2;"); //заменяем второй класс на двоечку с точкой с запятой
 
        string[] words = spisok.Split(';'); //заносим строку в массив, разделитель массива - точка с запятой
        
        for (int i = 0; i < words.Length; i++) { 
            if (words[i].Contains("1")) //проверка, попала ли единичка в элемент массива
                result1 += words[i];
            if (words[i].Contains("2")) //проверка на двоечку
                result2 += words[i];
        }
        result1 = result1.Replace("1",","); //заменяем единичку на запятую
        result2 = result2.Replace("2", ","); //заменяем двоечку на запятую
 
        if (result1.LastIndexOf(",") == result1.Length - 1) //проверяем, стоит ли запятая в конце нашей строки 
             result1 = result1.Substring(0, result1.Length - 1);
        if (result2.LastIndexOf(",") == result2.Length - 1) //проверяем, стоит ли запятая в конце нашей строки 
            result2 = result2.Substring(0, result2.Length - 1);
        Console.WriteLine(result1);
        Console.WriteLine(result2);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2018, 16:16
Помогаю со студенческими работами здесь

Вывести слова текста, которые отличны от последнего слова и количество символов в которых не более четырех
Дан текст, содержащий от 2 до 50 слов, в каждом из которых от 1 до 7 строчных латинских букв; между соседними словами − не менее ...

Напечатать все слова текста, в которых первая буква слова входит в него еще раз
Дана последовательность слов, разделенных запятыми, в конце точка. Напечатать все слова, в которых первая буква слова входит в него еще раз.

Создать новый текст, который содержит все слова исходного текста, длина которых равна длине минимального слова
Написать программу на языке Pascal для обработки строк. Строка должна вводиться с клавиатуры. Полученная строка и другие элементы (согласно...

Вырезать определенные слова из текста
Вася записал выступление профессора Угугумкина, для простоты в запиcеи он использовал только маленькие латинские буквы. Профессор...

Разбить строку (слова идут через запятую) на отдельные слова.
Хочу реализовать на сайте поиск по ключевым словам. Ключевые слова хочу вводить в 1 форму через запятые, как мне их потом разбить на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru