Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2013, 19:33   #21
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Зачем разбивать строку на токены? Ведь можно и без таких затрат обойтись
Цитата:
Вам уже давным-давно привели код для решения этой задачи
неа, не показали, ИМХО.
Строку надо разбить на слова в любом случае.
Но его решение сложности O(N^2), а тут есть O(N*log(N)).
Вся разница в поиске (у Chainik!) он занимает линейное время, но поиск в словаре - логарифмическое.

Цитата:
Ваша программа не учитывает знаки препинания.
а их надо учитывать? - Chainik! исправил код из первого поста (а там знаками препинания и не пахло)

Цитата:
Впрочем, твердого и простого правила, по которому кавычки требуется использовать именно таким образом, не существует.
Есть правило по которому компилятор ищет заголовочные файлы.
Если ты пишешь имя в кавычках - файл будет искаться сначала в каталоги сборки, а потом в стандартном каталоге (а это долго).
Если пишешь имя в угловых скобках - ищет только в стандартном каталоге. Поэтому если ты хочешь свои хедеры подключать с квадратными скобками - скопируй их в стандартный каталог xD, а остальные желающие собрать твое творение будут недовольны.

Последний раз редактировалось rrrFer; 02.09.2013 в 19:41.
rrrFer вне форума Ответить с цитированием
Старый 02.09.2013, 19:41   #22
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
а их надо учитывать? - Chainik! исправил код из первого поста (а там знаками препинания и не пахло)
Логично бы учитывать. Зависит от требований. Да, может исходные данные изночально очищены от "лишних" знаков.
8Observer8 вне форума Ответить с цитированием
Старый 02.09.2013, 19:46   #23
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Логично бы учитывать. Зависит от требований. Да, может исходные данные изночально очищены от "лишних" знаков.
если в файле находятся имена файлов - точка уже не будет являться знаком препинания? )
Что значит "лишние"?
rrrFer вне форума Ответить с цитированием
Старый 02.09.2013, 20:14   #24
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Но его решение сложности O(N^2), а тут есть O(N*log(N)).
Вся разница в поиске (у Chainik!) он занимает линейное время, но поиск в словаре - логарифмическое.



Покажите как надо написать эту прогу, но только через посимвольную обработку, примерно как у меня....
помог - жми на весы

Последний раз редактировалось Chainik!; 02.09.2013 в 20:19.
Chainik! вне форума Ответить с цитированием
Старый 02.09.2013, 20:27   #25
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
неа, не показали, ИМХО.
Строку надо разбить на слова в любом случае.
Но его решение сложности O(N^2), а тут есть O(N*log(N)).
Вся разница в поиске (у Chainik!) он занимает линейное время, но поиск в словаре - логарифмическое.


а их надо учитывать? - Chainik! исправил код из первого поста (а там знаками препинания и не пахло)


Есть правило по которому компилятор ищет заголовочные файлы.
Если ты пишешь имя в кавычках - файл будет искаться сначала в каталоги сборки, а потом в стандартном каталоге (а это долго).
Если пишешь имя в угловых скобках - ищет только в стандартном каталоге. Поэтому если ты хочешь свои хедеры подключать с квадратными скобками - скопируй их в стандартный каталог xD, а остальные желающие собрать твое творение будут недовольны.
Да нет, не соглашусь с Вами, не обязательно.

Можно использовать такой алгоритм посимвольной обработки строки:
Можно ведь найти позицию начала и конца СРАВНИВАЕМОГО слова, затем прогнать строку с целью поиска слов, при этом, для каждого найденного слова определить позиции начала/конца и сравнивать посимвольно со СРАВНИВАЕМЫМ словом. Если совпало, значит найдено похожее слово, нет - пробегаем дальше, до конца строки в аналогичном поиске.

Т.е:
Пока не конец строки ищем СРАВНИВАЕМЫЕ слова, каждый раз, когда найдено СРАВНИВАЕМОЕ слово пробегаем по строке + ищем слова + сравниваем со СРАВНИВАЕМЫМ словом.

Такой вот алгоритм по которому теперь можно написать код и отладить его, в случае ошибки
Теперь не нужно разбивать строку на токены.

Последний раз редактировалось Igor95; 02.09.2013 в 20:30.
Igor95 вне форума Ответить с цитированием
Старый 02.09.2013, 21:19   #26
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
если в файле находятся имена файлов - точка уже не будет являться знаком препинания? )
Что значит "лишние"?
"лишние" - это я так знаки препинания обозвал. Точка, как часть слова - не считаю знаком препинания: text.txt, main.cpp и т.д.

Последний раз редактировалось 8Observer8; 02.09.2013 в 21:22.
8Observer8 вне форума Ответить с цитированием
Старый 02.09.2013, 21:32   #27
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
"лишние" - это я так знаки препинания обозвал. Точка, как часть слова - не считаю знаком препинания: text.txt, main.cpp и т.д.
А если не файл?
Igor95 вне форума Ответить с цитированием
Старый 02.09.2013, 21:41   #28
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
А если не файл?
Может его программа работает только "очищенным" текстом, где нет знаков препинаний и "хитрых" данных. Что-то из разряда: "Коров нельзя кормить мясом".
8Observer8 вне форума Ответить с цитированием
Старый 02.09.2013, 21:49   #29
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Может его программа работает только "очищенным" текстом, где нет знаков препинаний и "хитрых" данных. Что-то из разряда: "Коров нельзя кормить мясом".
Да, возможно Вы правы, но автор решает более обобщенную задачу, на мой взгляд. Скорее всего, код нужно адаптировать под различные условия.

Вообще, мы недолжны думать, что разделители будут такие, под которые адаптирована обработка строки. Не будем предполагать, что клиент подаст нам на обработку строку, в которой разделители - одни точки да запятые.
Выход такой: передать в функцию строку с разделителями. Таким образом можно работать с любой строкой. Беспроигрышный вариант, на мой взгляд

Последний раз редактировалось Igor95; 02.09.2013 в 21:55.
Igor95 вне форума Ответить с цитированием
Старый 02.09.2013, 21:51   #30
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Да, возможно Вы правы, но автор решает более обобщенную задачу, на мой взгляд. Скорее всего, код нужно адаптировать под различные условия.

Проще всего - это передавать в функцию или метод (если C++) строку символов-разделителей. Теперь уж можно обработать строку с любыми разделителями. Беспроигрышный вариант, на мой взгляд
Хм... Хотя и у коров есть "защита о дурака". Они не станут есть мясо. Поэтому в программах нужно учитывать все возможные входные данные (очевидные варианты и максимальное их количество)
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать количество слов в строке Chainik! Общие вопросы C/C++ 31 10.04.2016 01:55
Подсчет одинаковых слов в строке versegg Помощь студентам 0 27.05.2012 19:39
Количество одинаковых слов в строке. Delphi topside Помощь студентам 10 30.10.2011 23:05
Подсчитать количество слов и количество букв MDSIQ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.11.2010 16:57