Форум программистов, компьютерный форум CyberForum.ru

Разделение строки на слова - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 73, средняя оценка - 4.99
Ivanius
Сообщений: n/a
16.03.2007, 14:02     Разделение строки на слова #1
Подскажите пожалуйста, как разделить строку на отдельные слова. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mik-a-el
CyberForum Owner
 Аватар для mik-a-el
56140 / 35890 / 231
Регистрация: 10.04.2006
Сообщений: 12,584
16.03.2007, 14:09     Разделение строки на слова #2
Алгоритм:
1. Запоминаешь позицию символа.
2. Идешь по каждому символу строки, пока не встретишь пробел, точку, запятую или какой другой символ разделитель - это будет конец слова.
3. Берешь подстроку от первой позиции (п.1) до полученной - это будет само слово.
4. Идешь дальше, пока символы-разделители не закончатся. Как закончатся - это начало следующего слова. Далее - п.1 и так до конца строки.
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
30.01.2010, 10:33     Разделение строки на слова #3
Цитата Сообщение от mik-a-el Посмотреть сообщение
Алгоритм:
1. Запоминаешь позицию символа.
2. Идешь по каждому символу строки, пока не встретишь пробел, точку, запятую или какой другой символ разделитель - это будет конец слова.
3. Берешь подстроку от первой позиции (п.1) до полученной - это будет само слово.
4. Идешь дальше, пока символы-разделители не закончатся. Как закончатся - это начало следующего слова. Далее - п.1 и так до конца строки.
Это всё конечно ясно, но как поступать со словами типа u.s.a или J.W. Harisson, после преведеного выше алгоритма мы получим совсем неправильные слова типа u s a и т.д, что делать с такими словами?
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
30.01.2010, 12:11     Разделение строки на слова #4
Чтобы понять, что с ними делать, надо сначала определить самое главное - а что есть "слово"?

Если "словом" считается любая последовательность символов, ограниченная с двух сторон (началом/концом строки либо любыми из набора символов-разделителей), то предложенный mik-a-el алгоритм абсолютно правильный.
В противном случае, приводи детальное определение понятия "слово".
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
30.01.2010, 13:22     Разделение строки на слова #5
Цитата Сообщение от CheshireCat Посмотреть сообщение
Чтобы понять, что с ними делать, надо сначала определить самое главное - а что есть "слово"?

Если "словом" считается любая последовательность символов, ограниченная с двух сторон (началом/концом строки либо любыми из набора символов-разделителей), то предложенный mik-a-el алгоритм абсолютно правильный.
В противном случае, приводи детальное определение понятия "слово".
Я имею ввиду произвольный текст, который может быть и последовательностью ограниченной пробелами, точками, запятыми и словом может быть инициалы или аббревиатуры, например u.s.a, тогда как в таком случае поступать? у мя есть некоторое решение, но для этого надо считывать слова посимвольно причем считывать надо сразу 3 символа(чтобы определить это аббревиатура или просто разделитель), я хочу узнать можно как-то по рациональнее это сделать?
insideone
Модератор
Автор FAQ
 Аватар для insideone
3623 / 901 / 48
Регистрация: 10.01.2010
Сообщений: 2,429
30.01.2010, 21:10     Разделение строки на слова #6
Если аббревиатуры то что мешает сделать проверку по виду "Если буква заглавная то знак точки после неё не считать разрывом между словами". На деле это можно реализовать дополнительным флагом "bSkip". Ну примерно так...

Насчет кривых входных данных - какие данные такие и результат. От всего перестраховаться не возможно. Это мне напоминает ситуацию написания антимата для чата =)
Yandex
Объявления
30.01.2010, 21:10     Разделение строки на слова
Ответ Создать тему
Опции темы

Текущее время: 13:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru