Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ Курсовая задача

Автор: Florensita 14.5.2007, 8:32

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

Задан текст, состоящий из нескольких строк, каждая из которых в свою очередь состоит из слов, разделенных пробелами. Подсчитать количество слов в тексте, совпадающих с заданным ключевым словом. При проверке совпадения слов символ «*»(звездочка) в начале или в конце слова обрабатывать специальным образом: считать его признаком того, что в проверяемом слове на этом месте может находится непустая последовательность произвольной длины, состоящая из любых символов, кроме пробела. Можно считать, что символ «*» в ключевом слове встречается 1 раз.

Например: Ключевое слово «кор*» будет совпадать со словами «корпус», «корабль» и т.п. или слову «корпус» могут соответствовать ключевые слова «*пус», «корп*» и т.п. Случай включения ключевого слова можно не рассматривать(т. е. ключ «прав*» не соответствует слову «управление»)

Заранее спасибо. smile.gif


Автор: AlexDemche 14.5.2007, 11:56

Ну а Вы сами думали над этой самой звездочкой? Какие идеи?

Автор: Ботаник 14.5.2007, 11:58

Звёздочку можно обрабатывать так:

Sub main()
Dim ИсходныйТекст As String
Dim Ключ As String
Dim ЗвёздочкаВпереди As Boolean
Dim ЗвёздочкаСзади As Boolean
Dim i As Integer, j As Integer, k As Integer
Const Пробел = " "

Debug.Print "---"
ИсходныйТекст = "Корабль с коркой плыл корпусом по морю субкорпускул"
'Добавляю пробелы в начало и в конец
ИсходныйТекст = Пробел & ИсходныйТекст & Пробел
Ключ = "кор*"

If (Left(Ключ, 1) = "*") Then
ЗвёздочкаВпереди = True
'Убираю звёздочку из ключа и добавляю пробел
Ключ = Right(Ключ, Len(Ключ) - 1) & Пробел
ElseIf (Right(Ключ, 1) = "*") Then
ЗвёздочкаСзади = True
'Убираю звёздочку из ключа и добавляю пробел
Ключ = Пробел & Left(Ключ, Len(Ключ) - 1)
End If

i = 1
Do
'Ищу строку ключа в тексте
j = InStr(i, ИсходныйТекст, Ключ)
If (j = 0) Then Exit Do
If (ЗвёздочкаСзади) Then
'Искать пробел правее ключа
k = InStr(j + 1, ИсходныйТекст, Пробел)
Debug.Print Mid(ИсходныйТекст, j, k - j)
End If
If (ЗвёздочкаВпереди) Then
'Искать пробел левее ключа
For k = j - 1 To 1 Step -1
If (Mid(ИсходныйТекст, k, 1) = Пробел) Then Exit For
Next k
If (k < 1) Then k = 1
Debug.Print Mid(ИсходныйТекст, k + 1, j - k + 1)
End If
i = j + 1
Loop
End Sub


Для ключа "*л" программа выдаёт:
---
плыл
субкорпускул

Для ключа "кор*" программа выдаёт:
---
Корабль
коркой
корпусом

Ха! Какой прикольный номер у моего сообщения: раз-два-три

Автор: Diablo 11.9.2007, 18:17

Помогите написать в паскале курсовик плиз
задача звучит так:
Написать простейший текстовой редактор.

зы: зарание благодарен

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)