Страница: 1 |
Помогите, пожалуйста, написать программу!!!! Если можно с комментариями. "В заданном предложении найти пару слов, из которых одно является обращением другого." Спасибо.
Обращением это как? User=resu, шалаш=шалаш? Он имеет ввиду полиндром того слова что ты ввёл ... то бишь КАЗАК +) напрмиер и тд.... Проще всего проверить слово на полиндромность это: 1) Берём заводим две строковые переменные 2) В одну из них кладём то слова что требует проверки и в другую тоже (назову их А и Б) 3) Теперь бёрём содержимое переменной Б и переписываем её задом на перёд то бишь если в ней было АААББА то будет АББААА 4) Просто сравниваем перемённую А и переменную Б если они ровны то значит слово полиндром а если нет то уж извените... Так теперь по поводу предложения.... тебе надо сделать его парсинг .. то бишь бёрёшь всё что является разделителем в предложении ..а далее прогоняешь его и если встретился разделитель то сохраняешь слово в масиве например и дальше смотришь.... а потом уже выше описанным методом проверяешь каждое слово в масиве на полиндроммность блин слово такое язык сломаешь... Вот кодик выдранный из другого проекта для разыскивания слов и засовывание их в массив (как разделитель используется естественно пробел). Конечно по=хорошему массивчик надо было бы делать динамическим.. но мне тогда этого не надо было Public gMass(6) As String Public Sub SearchSpace(sField) Dim i As Integer Dim sUse As String sUse = sField i = 0 Debug.Print "Это было раньше: " & CStr(sField) & vbCrLf Do While Len(sUse) <> 0 If InStr(1, sUse, " ") - 1 <> -1 Then gMass(i) = Left$(sUse, InStr(1, sUse, " ") - 1) Else gMass(i) = sUse Exit Do 'Если вставить 'Exit Sub то увидишь последний элемент, но лучше этого не делать, 'так как автоматом перечеркиваешь все, что у тебя после цикла End If sUse = Replace$(sUse, gMass(i) & " ", "", 1) Debug.Print "gmass " & i & "=" & CStr(gMass(i)) & vbCrLf i = i + 1 Loop End Sub Остальное сам додумай с помощью Fallout'а или с помощью собственного моЗГа.. Удачи... Можно таким не очень оригенальным способом... Dim sInput as String sInput = "HEREH" IF (sInput = StrReverse(sInput)) then 'полиндром Else 'не полиндром End If Вот еще один вариант: Ну рас ответил одному, отвечу и еще одному , так чтобы не обидно было: Сплит плох тем что если например у человека предложение с точкой .. что собсвенно говоря нормально то будет уже ошибка и если в предложении например больше чем один пробел ... между словами или вначале например пробел ... то тоже будет ошибка в выводе... вот я тут .. написал немного... незнаю не тестил ... тут ВБ нет +) тут и арсер и проверка.... впринцвпи парсер должен быть свободен от выше указанных нидостатков.. жалко в форуме нету что нить типа как на ПШПББшном тегов КОД ... и тд итп с подстветкой синтаксиса например ... 2Админс это бы всех порадовало и коды былиб читабельные ... +) а то всё в одну кучу Private Sub Main() Dim sInput as String Dim dList as String, cVal as String, fWord as String Dim sLen as Long, ssLen as Long, sdStart as Long Dim pVal as long, pStrs() as String dList = " ,/!|." sInput = " Эх ты казак, Коток тебя переехал." sInput = Lcase(sInput) sLen = Len(sInput) For ssLen = 1 To sLen cVal = Mid(sInput, ssLen, 1) sdStart = InStr(dList, cVal) If (sdStart = 0) Then fWord = fWord & cVal ElseIf (sdStart > 0) Then If (Len(fWord)>0) pVal = pVal + 1 ReDim Preserve pStrs(pVal-1) pStrs(pVal-1) = aWord aWord = fWord fWord = VbNullString End If End If Next ssLen For ssLen = 0 to (pVal-1) If (pStrs(ssLen) = StrReverse(pStrs(ssLen))) Then 'слово полиндром вставь сюда свой 'код который будет сообщать это 'кому нить и как нить +) End If Next ssLen End Sub П.С: Если код не будет работать +) то принцып я думаю поняли.. хотя вроде ошибок я не делал +)... ну кто его знает вообщем имейте ввиду и не кидайте сразу кирпичами сплит - дешево и сердито, даже если точка будет или два пробела, то попросту в массиве окажутся строки нулефой длинны... я уже давно ей пользуюсь и никаких подобных замечаний не встречал Страница: 1 |
Вопрос: Помогите, пожалуйста, написать программу!!!!
Добавлено: 20.05.04 14:13
Автор вопроса: Grommy
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 20.05.04 14:20
Номер ответа: 2
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #2
Добавлено: 20.05.04 15:06
Номер ответа: 3
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #3
Добавлено: 20.05.04 15:11
Номер ответа: 4
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #4
Добавлено: 20.05.04 15:22
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 20.05.04 15:46
Option Explicit
Option Compare Text
Dim Str1 As String, sArray() As String, _
i As Long, j As Long
Str1 = InputBox("Ââåäèòå ïðåäëîæåíèå")
If Len(Str1) = 0 Then Exit Sub
For i = 0 To UBound(sArray)
For j = i + vbNull To UBound(sArray)
If sArray(i) = StrReverse(sArray(j)) Then
Call MsgBox("Íó âîò: " & sArray(i) & _
" & " & sArray(j), _
vbInformation)
Exit Sub
End If
Next
Next
Call MsgBox("Íè÷å òàêîãî íå íàéäåíî ", vbCritical)
End Sub
PS
Сорри за многострочность (за символ "_")... обещал...
Номер ответа: 6
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #6
Добавлено: 20.05.04 16:05
Номер ответа: 7
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #7
Добавлено: 20.05.04 16:22
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 20.05.04 23:42