Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В главе 6.3 K&R предлагается разобрать решение следующей задачи(своими словами, ибо распечатанный вариант книги на работе, а pdf-варианта сейчас нет): У нас есть keyword языка C, такие как fe : {else,if,then, ..., smth_else}. У нас есть какой-то текст. Задача: Найти число вхождений каждого слова из keyword в данном тексте. Прочитал первую страницу, и дальше решил делать сам. Понял для чего нужны в данном случае (и видимо вообще) структуры. Данные предлагают хранить следующим образом: Код: plaintext 1. 2. 3. 4. 5. Окей, пусть будем хранить так, хотя я не уверен что это моветон хранить подобным образом массив word (ведь я явным образом не указываю размерность массива, хоть K&R и говорит, что компилятор сам определит размерность и переживать не стоит). Решать эту задачу я решил в лоб. Для начала в лоб, а потом буду пытаться улучшить алгоритм. При решение в лоб я делаю цикл между каждым отдельно взятым словом из char* buf cо всеми word.name(1 слова из char* buf на n слов word.name). И вот этим то и проблема, я не знаю как его сделать, ведь мне неизвестна размерность массива. Могу конечно определить сколько выделено байт на массив, и исходя из этого рассчитать размерность. Но не хочу так. Подскажите как лучше сделать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 09:15 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, в конце каждой строки (массива char'ов) будет символ \0. Следовательно, идём в цикле по строке, пока не встретится ноль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 09:32 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ вот этим то и проблема, я не знаю как его сделать, ведь мне неизвестна размерность массива. Могу конечно определить сколько выделено байт на массив, и исходя из этого рассчитать размерность. Но не хочу так. Подскажите как лучше сделать ? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 09:41 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
SashaMercury Где такие простые задачки задают? Лучше реализуйте ls -l, полезнее для развития. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 11:37 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 11:42 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, а количество байт выделенных для каждого words будет одинаковым ? Слова ведь разной длины. Или произойдет выравнивание по максимуму ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 15:58 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky, а количество байт выделенных для каждого words будет одинаковым ? Слова ведь разной длины. Или произойдет выравнивание по максимуму ? Конечно, там же указатель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 16:12 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
То есть у меня будет 100 элементов в массиве структур, и в 99 максимум будет три символа, а в одном 10 символов в с концом строки, и в итоге я потрачу 1000 байт для хранения этого массива ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 16:21 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТо есть у меня будет 100 элементов в массиве структур, и в 99 максимум будет три символа, а в одном 10 символов в с концом строки, и в итоге я потрачу 1000 байт для хранения этого массива ? Нет, вы не поняли. Размер элементов одинаковый не потому что выравниваются по размеру строк, а потому что в массиве хранятся не сами строки, а указатели на них. А указатели все одного размера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 16:31 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
Да и вообще массив - это по определению коллекция из одинаковых элементов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 16:33 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
Балбес:( ну конечно вы правы, только адрес хранится ! Понял, спасибо C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2014, 16:41 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
smaldГде такие простые задачки задают? SashaMercuryВ главе 6.3 K&R ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2014, 20:34 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
Сегодня решил эту задачу, потратил около 60 минут, с учётом исправления ошибок. Это много, но лучше чем раньше. Плохо что целый месяц не занимался конечно. Проверьте пожалуйста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Также у меня возникли вопросы: 1) Возможно ли написать buf в несколько строк ? 2)Всё-же мне не очень нравится строка Код: plaintext 1. выше я писал о том что не уверен что это моветон. Насколько эта запись безопасна ? Пока не знаю как работает sizeof, нужно будет посмотреть исходный код. Меня терзают сомнения, по поводу этой строчки. 3)Хотел обратиться к tab[i].word по-нормальному, через указатели, не получилось. Подскажите как это сделать ? Мне не очень нравится мой код. fe, не нравится как я назвал переменную в которой хранится текущее начало диапазона buf_curst. Не очень доволен именованием переменных в функции для сравнения слова и полуоткрытого диапазона. Далее, код слишком большой, мне кажется что его можно уменьшить. На что ещё обратить внимание ? Далее, касаемо алгоритма. Очевидно, он не оптимален. Пока не понятно в какую сторону копать чтобы его улучшить. Но улучшать нужно. Какие-то слова, fe, нужно отметать сразу. Возможно стоит сравнивать только с теми словами в алфавите, длина которых равна длине найденного диапазона символов. Для длины, ввести третью размерность. Пока что так. И теперь касаемо первой страницы K&R 6.3. Пока прочитал только её. 1. Выводы по структурам: поля - есть атрибуты, и по факту структура описывает схему отношений в РМД. Структуры используются для работы с таблицами при написании СУБД ? 2. Вот как K&R задают структуру: K&RSTRUCT KEY { CHAR *KEYWORD; INT KEYCOUNT; }; STRUCT KEY KEYTAB [NKEYS]; Мне не нравится эта избыточность, к чему она тут ?зачем везде добавлять key ? Их читают, и остальные могут так начать делать. Дочитаю 6.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2014, 04:43 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
Видимо smald уже подсказал мне как улучшить алгоритм, использовать алгоритм Бойера — Мура. Тоже почитаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2014, 04:57 |
|
||
|
K&R 6.3 Решение приведённой задачи. Вопросы по реализации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПока не знаю как работает sizeof, нужно будет посмотреть исходный код. Меня терзают сомнения, по поводу этой строчки.исходник чего ты хочешь посмотреть, компилятора? ))) sizeof - оператор языка, а не функция, он вычисляет размер типа данных в момент компиляции. SashaMercuryзачем везде добавлять key ? Их читают, и остальные могут так начать делать.это синтаксис языка С для типа данных "структура". struct key; Стандартная идиома, кстати, описывать структуры в С, такая: Код: plaintext 1. 2. 3. PS в С++ typedef не нужен, ещё одно отличие языков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2014, 09:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38606885&tid=2019559]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 180ms |

| 0 / 0 |
