поиск N-го слова в строке

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
devel
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 19.02.2003 (Ср) 13:38
Откуда: Russia

поиск N-го слова в строке

Сообщение devel » 10.04.2003 (Чт) 17:24

Подскажите плз какое-нибудь красивое решение задачи:

Есть строка символов. Нужно найти N-е слово в строке. Словом называется любой набор подряд идущих печатных символов.

Может есть что-нибудь стандартное или все ручками делать?

Заранее спасибо.
Devel

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.04.2003 (Чт) 17:27

А что за строка? Если текст, написаный типографски правильно (т.е. после знаков препинания ставится пробел), то можно разбивать строку на слова с помощью Split(Text," ").
Но вообще-то надо ручками
Lasciate ogni speranza, voi ch'entrate.

devel
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 19.02.2003 (Ср) 13:38
Откуда: Russia

Сообщение devel » 10.04.2003 (Чт) 17:34

Отличная идея!
Слова разделены непечатными символами, в т. ч. и пробелами. Если запятая скажем стоит отдельно, она считается отдельным словом - это меня устраивает.
Тогда все непечатные символы, в т. ч. переводы строки и тому подобное можно заменить на пробелы и воспользоваться Split.
Щас попробую... 8)
Devel

Damage
Обычный пользователь
Обычный пользователь
 
Сообщения: 50
Зарегистрирован: 06.04.2003 (Вс) 18:31
Откуда: Москва

Сообщение Damage » 11.04.2003 (Пт) 9:26

а не проще ли сделать это через
MyPos=InStr(SearchString, SearchChar) находит первое появление в строке и показывает позицию, после чего отделяем от строки начало до MyPos+len(SearchChar) и повторяем операцию N раз.

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.04.2003 (Пт) 13:35

Split работает в разы быстрее и не надо заморачиваться с позициями.

Только для Split'а нужно подготовить строку:
Код: Выделить всё
Dim dblSpace As String

dblSpace = "  "

s = Trim$(s)
Do While (InStr(1, s, dblSpace))
    s = Trim$(Replace(s, dblSpace, " "))
Loop

arr = Split(s, " ")

devel
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 19.02.2003 (Ср) 13:38
Откуда: Russia

Сообщение devel » 11.04.2003 (Пт) 16:55

Damage, все круто, только фишка в том, что SearchChar, про которую ты пишешь, не известна. :lol:
Мне же нужно N-e слово, а не N-е вхождение подстроки.

skiperski, ты как всегда крут! Я иду тем же путем. Только небольшое замечание: нужно сначала заменить все непечатаемые символы на пробелы, а потом убивать повторяющиеся пробелы, потому что слова могут быть разделены, например, символом перевода строки.
Devel

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 11.04.2003 (Пт) 17:11

devel писал(а):нужно сначала заменить все непечатаемые символы на пробелы, а потом убивать повторяющиеся пробелы, потому что слова могут быть разделены, например, символом перевода строки.

Ты об этом упоминал выше, я и решил не повторяться.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron