Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
.NET 4.x

Как найти конец слова?

22.11.2019, 13:55. Показов 1914. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некое предложение из многих слов.
Как найти конец каждого слова в предложении.
Например предложение - "Есть некое предложение из многих слов."
Конец первого слова - " некое предложение из многих слов."
Конец второго слова - " предложение из многих слов."
Конец третьего слова - " из многих слов."
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2019, 13:55
Ответы с готовыми решениями:

Найти и сохранить в строке те слова, которые отличны от первого, предварительно перенеся первую букву в конец слова
Дана строка. Словом текста считается любая последовательность букв латинского алфавита; между соседними словами - не менее одного пробела,...

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

Напечатать все слова, отличные от последнего слова, преобразовав по правилу: перенести первую букву в конец слова
Помогите пожалуста решыть: 10.18. Программа. Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10...

16
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
22.11.2019, 16:25
Во-первых в каком виде вам нужно получить конец слова? Если индекс последней буквы слова, то, делите предложение на части, с помощью InStr(), разделенные пробелами, и индекс, предшествующий каждому следующему пробелу и будет индекс конца слова.
Если же просто отделить каждое слово и получить массив этих слов, то обычным Split() это легко сделать.
1
 Аватар для marksoft1993
22 / 18 / 4
Регистрация: 07.10.2019
Сообщений: 243
22.11.2019, 17:00
Возможно вам надо просто сделать Split сроки по пробелам и все!
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
22.11.2019, 18:35  [ТС]
Прошу прощения если я непонятно написал.
Есть много кодов для поиска слов в тексте с выделением найденного, но выделяется только то слово, что задано.
Например задано три буквы - "печ" будут найдены слова - ПЕЧка, ПЕЧурка, ПЕЧной и д.т. Но если найти позицию окончания слов, то можно было бы выделить всё слово целиком - ПЕЧКА, ПЕЧУРКА, ПЕЧНОЙ и т.д.
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
28.11.2019, 13:17  [ТС]
Неужели никто не знает, как найти слово в тексте по его части???
Не поверю!
0
 Аватар для winkode
12 / 12 / 1
Регистрация: 01.03.2012
Сообщений: 159
28.11.2019, 14:02
Думаю проблема в том что не совсем ясно что вы хотите сделать.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
28.11.2019, 14:22
Приходит на ум идея найти слово по его части, например задали ПЕЧ, нашли ПЕЧурка, запомнили индекс наяала слова и выделять буквы по-порядку сначала в направлении начала текста, уперлись в ПРОБЕЛ - запомнили индекс, далее читаем символы в направлении конца текста пока не уткнетесь снова в ПРОБЕЛ, вот вам и будет выделение слова, найденного по его части... Чуток костыль, но как вариант.
0
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
28.11.2019, 15:09
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    
 Dim list_str As New List(Of String)
        list_str = TextBox1.Text.Split(" ").ToList
        Dim len_start As Integer = 0
        For Each elem As String In list_str
            If elem.Contains(TextBox2.Text) Then
                TextBox1.Focus()
                TextBox1.SelectionStart = len_start
                TextBox1.SelectionLength = elem.Length
            Else
                len_start += elem.Length
                len_start += 1 ' на каждый пробел
            End If
        Next
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
28.11.2019, 17:15  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
Приходит на ум идея найти слово по его части, например задали ПЕЧ, нашли ПЕЧурка, запомнили индекс наяала слова и выделять буквы по-порядку сначала в направлении начала текста, уперлись в ПРОБЕЛ - запомнили индекс, далее читаем символы в направлении конца текста пока не уткнетесь снова в ПРОБЕЛ, вот вам и будет выделение слова, найденного по его части... Чуток костыль, но как вариант.
Да, я тоже пошел так, а в чем костыль?
Хотелось бы через регулярное выражение, но я плохо в них соображаю.

Добавлено через 28 минут
Получилось наверняка коряво, но это то, что смог
VB.NET
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
 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        txt = RichTextBox1.Text
        nm = InStr(poz, RichTextBox1.Text, TextBox1.Text)
1:
        If nm > 0 Then
            str = Mid(txt, nm, Len(TextBox1.Text) + 1)
            If str.Contains(" ") Then
                RichTextBox1.SelectionStart = nm
            Else
                nm = nm - 1
                GoTo 1
            End If
            stw = Microsoft.VisualBasic.Right(txt, Len(txt) - nm + 1)
            nmt = InStr(1, Trim(stw), " ")
            RichTextBox1.SelectionLength = nmt - 1
            RichTextBox1.SelectionBackColor = Color.LightGray
            RichTextBox1.SelectionColor = Color.Red
            RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
            poz = nm + nmt
        Else
            Exit Sub
        End If
        nm = InStr(poz, RichTextBox1.Text, TextBox1.Text)
        GoTo 1
    End Sub
Скажу сто раз "спасибо", если кто-то сделает лучше.
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
28.11.2019, 19:24
Вариант
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim fs As String = TextBox1.Text
    Dim qq = From q As String In rtb.Text.Split({Chr(32)}, StringSplitOptions.RemoveEmptyEntries) Where q.StartsWith(fs, True, CultureInfo.CurrentCulture)
    If qq.Count > 0 Then
        qq = qq.Distinct
        Dim idx, k As Integer
        For Each s As String In qq
            idx = 0
            Do While idx < rtb.Text.Length
                k = rtb.Find(s, idx, RichTextBoxFinds.WholeWord)
                If k < 0 Then Continue For
                rtb.Select(k, s.Length)
                rtb.SelectionBackColor = Color.LightGreen
                idx = k + s.Length + 1
            Loop
        Next
    End If
End Sub
1
104 / 55 / 7
Регистрация: 02.07.2013
Сообщений: 314
29.11.2019, 02:45
Вариант доработанный для RichTextBox
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim len_start As Integer = 0
        For Each line In RichTextBox1.Lines
 
            Dim arr As List(Of String) = Split(line, " ").ToList
            For Each word In arr
                Dim searh_word As String = LCase(word)
                If searh_word.Contains(LCase(TextBox2.Text)) Then
                    RichTextBox1.Select(len_start, word.Length)
                    RichTextBox1.SelectionBackColor = Color.LightGreen
                End If
                len_start += word.Length
                len_start += 1
            Next
 
        Next
    End Sub
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
29.11.2019, 10:09  [ТС]
Написал вот такой код.
Вроде работает
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        t = {"(\b", LCase(TextBox1.Text), ")\b"}
        Pattern = String.Join("\w*", t) & "\w*"
        Application.DoEvents()
        Dim Group1 As String() = (From M As Match In Regex.Matches(RichTextBox1.Text, Pattern) Select M.Groups(0).Value).ToArray()
        '[  
        For i = 0 To Group1.Count - 1
            Dim allIp As MatchCollection = Regex.Matches(RichTextBox1.Text, Group1(i))  ' Word)
            For Each ip In allIp
                RichTextBox1.SelectionStart = ip.Index
                RichTextBox1.SelectionLength = ip.Length
                RichTextBox1.SelectionBackColor = Color.LightGray
                RichTextBox1.SelectionColor = Color.Red
                RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
            Next
        Next
    End Sub
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.11.2019, 15:18
Цитата Сообщение от Anderis49 Посмотреть сообщение
Вроде работает
Не работает. Ну и не стоит менять цвет текста и шрифт т.к. при отмене выделения возникнут дополнительные проблемы.
Миниатюры
Как найти конец слова?  
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
30.11.2019, 09:09  [ТС]
Не учел регистр...
теперь будет работать
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        RichTextBox1.Select(1, RichTextBox1.TextLength)
        RichTextBox1.Select()
        RichTextBox1.SelectionColor = Color.Black
        RichTextBox1.SelectionFont = New Font("Verdana", 10, FontStyle.Regular)
        t = {"(\b", TextBox1.Text, ")\b"}
        Pattern = String.Join("\w*", t) & "\w*"
        Application.DoEvents()
        Dim Group1 As String() = (From M As Match In Regex.Matches(LCase(RichTextBox1.Text), Pattern) Select M.Groups(0).Value).ToArray()
        '[  
        For i = 0 To Group1.Count - 1
            Dim allIp As MatchCollection = Regex.Matches(LCase(RichTextBox1.Text), Group1(i))  ' Word)
            For Each ip In allIp
                RichTextBox1.SelectionStart = ip.Index
                RichTextBox1.SelectionLength = ip.Length
                RichTextBox1.SelectionBackColor = Color.LightGray
                RichTextBox1.SelectionColor = Color.Red
                RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
            Next
        Next
        RichTextBox1.Focus()
    End Sub
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
30.11.2019, 13:59
Цитата Сообщение от Anderis49 Посмотреть сообщение
теперь будет работать
Попробуйте в качестве образца ввести не "печ" а "Печ".
Немного отредактировал ваш код
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    RichTextBox1.SelectAll()
    RichTextBox1.SelectionColor = Color.Black
    RichTextBox1.SelectionFont = New Font("Verdana", 10, FontStyle.Regular)
    Dim Pattern = "(\b\w*" & TextBox1.Text.ToLower & "\w*)\b\w*"
    Dim mm = Regex.Matches(LCase(RichTextBox1.Text), Pattern)
    For i = 0 To mm.Count - 1
        RichTextBox1.SelectionStart = mm(i).Index
        RichTextBox1.SelectionLength = mm(i).Length
        RichTextBox1.SelectionBackColor = Color.LightGray
        RichTextBox1.SelectionColor = Color.Red
        RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
    Next
End Sub
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
01.12.2019, 13:21
Предложенный ТС код позволяет выделить все слова, в которых присутствует образец независимо от позиции в слове. Вариант кода для случая, когда образец размещается строго в начале слова.
VB.NET
1
2
3
4
5
6
7
8
9
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
    Dim Pattern = "(\b" & TextBox1.Text.ToLower & "\w*)\b\w*"
    Dim mm = Regex.Matches(LCase(rtb.Text), Pattern)
    For i = 0 To mm.Count - 1
        rtb.SelectionStart = mm(i).Index
        rtb.SelectionLength = mm(i).Length
        rtb.SelectionBackColor = Color.LightGray
    Next
End Sub
Ну и как можно снять выделение
VB.NET
1
2
3
4
5
Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
    rtb.SelectAll()
    rtb.SelectionBackColor = rtb.BackColor
    rtb.DeselectAll()
End Sub
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2019, 13:09  [ТС]
Спасибо OVVA, этот код проще, но он не выделяет слова с предлогами - Попробуйте в качестве образца ввести не "печ" или "Печ", а "выпеч", "запеч".
Верхний регистр устраняется просто переводом в нижний.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2019, 13:09
Помогаю со студенческими работами здесь

Напечатать все слова, перенеся первую букву каждого слова в конец слова
приветствую вас))) помогите пожалуйста даме... Текст задан строкой var St: string; Напечатать все слова, перенеся первую букву...

Найти в каждой строке слова палиндромы с четной длиной, удалить их и дописать в конец строки
Помогите пожалуйста, в строках на ассемблере ничего не понимаю :( Вот условие задачи: Задан текстовый файл Input.txt, состоящий из...

Вводится текст. Конец ввода точка. Найти количество букв слов, слова разделяются пробелом
Вводится текст. Конец ввода точка. Найти количество букв слов, слова разделяются пробелом.

Как проверить конец строки на наличие определенного слова?
Добрый вечер! Подскажите пожалуйста, как реализовать следующее.. В Memo формируется одна строка, в ней может до 20 раз повторятся одно и...

Перенести первую букву в конец слова. Все остальные слова удалить
Дана строка. Словом текста считается любая последовательность букв латинского алфавита; между соседними словами - не менее одного...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
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
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru