Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Код: 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. ---компилятор выдает что чтото из скоюками в мейне: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 20:32 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
В ф-и reverse "{" - 5 штук, "}" - 4 штуки. Если бы вы применяли хотя бы зачатки форматирования кода, то вы бы это увидели даже не компилируя. Пишите каждый оператор на отдельной строке. После открывающей { делайте отступ вложенного текста на 4 пробела. Перед закрывающей } возвращайтесь на предыдущий уровень отступа, так что } по вертикали выровнена с оператором к которому она относится. Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 20:47 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Остаётся лишь добавить, что многие современные редакторы и IDE делают такое форматирование автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 21:41 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut, Ну, и предвосхищая дальнейшие вопросы, функция должна быть объявлена так: Код: plaintext 1. и переписана, либо сигнатура оставлена такой, как есть, но при вызове нужно выделять доп. буфер. В существующем виде функция не должна компилироваться нормальным компилятором, а если и скомпилируется, то завершится аварийно в процессе работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 21:45 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Как она вообще работает? При реверсе слова надо доходить только до половины иначе будет "двойной реверс". Тоесть никакого эффекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 22:06 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
\tttt\main.cpp||In function 'char* reverse(const char*)':| \tttt\main.cpp|14|error: assignment of read-only location '*(line + ((unsigned int)i))'| \tttt\main.cpp|19|error: invalid conversion from 'const char*' to 'char*'| \tttt\main.cpp|24|error: a function-definition is not allowed here before '{' token| \tttt\main.cpp|27|error: expected '}' at end of input| ||=== Build finished: 4 errors, 0 warnings ===| ---Такие ошибки появляются после добавление---const--то есть дело лиш утрудняется.Да и ошибки 24 и 27-срок к чему, как и разрешыть? Хотя главный вопрос что в общем сделать чтобы код скомпилировался и запустился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 22:11 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Код: 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. Модератор: Пользуйся тегом SRC... Да после удаление одной из закрывающихся скобок компилится но при запуске зависает? Да и смену слова до лиш до середины поменяли? Можеш там вайл лишний? Надо наверное написать через ОR--if line[i]==' ' || line[i]=='\0?Тогда пробел не надо в конце добавлять? То есть тогда код упрощается даже очень а не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 22:32 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutМожеш там вайл лишний? Нет, там другая ошибка. Проходи его пошагово, смотри значения всех переменных на каждом шагу, рисуй на листочке бумаги как изменяется строка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 23:44 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, да вы уже подскажите (это какой то там +.-1 или синтаксис не тот), ибо это задание сейчас для меня не актуально, хотя дело хочется довести до конца, ибо где то на 80% задача сделана, и подобных решений не встречал, хотя такой замысел у меня касательно такого задание был уже давно когда стыкнулся с такой задачей, да и здесь чистая алгоритмизация от а до я. До бумажки и рисование вряд ли дойдет сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2014, 23:50 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutэто задание сейчас для меня не актуально, хотя дело хочется довести до конца, Вот когда станет актуально, тогда и доведёшь. Как - я уже подсказал: пошаговым выполнением с контролем переменных и рисованием на бумажке. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 00:14 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut, это вопрос чести. Ты не можешь бесконечно просить других за тебя что-то делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 00:24 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Код: 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. ---уже даже так переделал и ничего не помагает там d-переменная была лишняя и надо было другую итерационную- j ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 00:38 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut---Такие ошибки появляются после добавление---const--то есть дело лиш утрудняется.Да и ошибки 24 и 27-срок к чему, как и разрешыть? Хотя главный вопрос что в общем сделать чтобы код скомпилировался и запустился? А кто тебе говорил, что достаточно будет ТОЛЬКО добавить const ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 00:39 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut Код: 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. ---уже даже так переделал и ничего не помагает там d-переменная была лишняя и надо было другую итерационную- j Ты скобочки-то не забыл добавить ? Может, переусердствовал, убираючи ? Модератор: Я добавил скобочки.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 00:47 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Ne rabotaet dalee, doballyay ne dobavlyay skobki? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 02:22 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZivфункция должна быть объявлена так: Код: plaintext 1. только хотел написать ) stut, а зачем вы делаете приведение ? сейчас сам проверю, пока не понятно Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 04:36 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Мне вообще ваша функция не нравится, она не самая красивая. Нужно провести декомпозицию задачи. 1.Реверс одного слова 2.Определить что слово закончилось и есть ли следующее 3. Цикл по массиву указателей на строку 4. вывод 5. Пока не понятно и не нравится названия переменных(l выглядит как единица), непонятно где и что вы храните. Через 1 час 20 минут попробую переписать. Вы сами её делали ? Кстати, откройте пока K&R главу 5.11. Там рассказывается про argc и argv, задачи чем-то похожи. Или посмотрить код функции echo, может сами сделаете пока меня тут не будет, и старшие товарищи спят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 04:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonstut, это вопрос чести. Ты не можешь бесконечно просить других за тебя что-то делать. простите, не заметил сразу :( значит не буду помогать, извините stut, и вообще искать самому ошибки интересно ! отлично проведённое время, вы ведь будете разбирать алгоритм, а не какую-нибудь ерунду! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 04:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Я уже решил вашу задачу. Делайте её быстрее пожалуйста, я хочу выложить сюда свою версию. Правда я написал код заново, ваш мне совсем не нравится. У меня получилось 10 строчек примерно, правда мне интересно как прокомментируют один мой ход один, потому решайте же быстрее stut ! У вас получится ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 06:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Всё оказалось даже проще чем я думал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 06:34 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 06:38 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
не то, сейчас исправлю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 07:06 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Отличный пример, мне очень нравится ))) Переделал ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 07:18 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПравда я написал код заново, ваш мне совсем не нравится. Вы прямо уже как настоящий программист стали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 11:45 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Не понимаю что там у вас получилось лиш консоль видно. Мне сейчас это не так надо. Если бы получалось не делал бы тему на форуме. Вам может не нравится но здесь не надо знать никакие указатели и т.д. Идея проста. Идем по символах строки до пробела/конца. Если находим маркируем как n и меняем предыдущие символы в обратном порядке. Потом маркируем начало след. Слова m=n+1, и находим следующий пробел (n=i) и меням местами буквы. И т.д. может так первый цыкл for-не вяжется с каждым отдельным словом. Может m-я не определяю в нужном блоке. Может лайн меняется во влож. цыкле но не выходет из него хотя было бы то же самое что без реверса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 13:34 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutИдем по символах строки до пробела/конца. Если находим маркируем как n и меняем предыдущие символы в обратном порядке. Потом маркируем начало след. Слова m=n+1, и находим следующий пробел (n=i) и меням местами буквы Алгоритм правильный. ОК. Смотрим код: stut Код: 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. ---уже даже так переделал и ничего не помагает там d-переменная была лишняя и надо было другую итерационную- j Какой физический смысл у значения (n-m-1)/2 ? Половина длины слова (примерно, см. ниже). А m и n - начало и конец слова относительно начала всей строки. Т.е. у вас j содержит смещение от начала всей строки, а условие окончания цикла сравнивает его с длиной слова j<(n-m-1)/2. Сравнивать нужно также со смещением от начала строки, что-то вроде этого: Код: plaintext 1. Теперь по поводу половины длины слова. Т.к. m - начало слова, m - последний символ слова, то длина слова = n - m + 1. Соответственно половина = (n - m + 1)/2, а не (n - m - 1)/2 Т.е. цикл будет такой: Код: plaintext 1. Как поправите эти ошибки - возвращайтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 14:13 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Для для слов с нечётным числом букв средня буква остаётся на месте. Всё просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 14:16 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut Код: plaintext 1. 2. 3. 4. 1. j увеличивается на 2 за один проход. Вот как у тебя происходит Код: plaintext 1. 2. 3. 4. 5. 6. 2. Это не обмен букв Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 14:32 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonДля для слов с нечётным числом букв средня буква остаётся на месте. Всё просто. При условии что вы эту среднюю букву правильно находите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 14:42 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Школьная задачка с информатики. 8-й класс первая четверть. И что мы здесь вообще делаем, господа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 15:26 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonШкольная задачка с информатики. 8-й класс первая четверть. И что мы здесь вообще делаем, господа. Двоечников спасаем. Уже третья четверть, а он еще не решил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 15:45 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
mayton,m-начало слова; n-1-конец (слово ворд в строке 6;10). Тогда середина (m+n-1)/2 (тогда середина ворда-8-которая не меняется. А если бы слово было на букву короче тогда-7,5=7 как целое тогда меняется лиш первая буква выходит за середину надо брать (m+n)/2 ). Можно j и не брать ибо я беру относительно начала строки. И когда я ввел j-ничего не поменялось. Ошибка может быть что как раз за пределы слов все эти изменение происходят ибо програма при запуске виснет. А почему j увеличивается на двое не понятно что применение инкремента в индексе невозможно? пк под рукою нет потому проверить не могу?// у меня вообще инф. не было в таком класе, тем более С, и это мне нужно как раз не для школы и не только не для школы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 15:48 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutне для школы и не только не для школы Это утверждение эквивалентно утверждению "не для школы и для школы" stut,m-начало слова; n-1-конец (слово ворд в строке 6;10). Тогда середина (m+n-1)/2 (тогда середина ворда-8-которая не меняется. Что ж вы все время эту -1 пихаете? Предлагагаю вам рассмотреть случай, когда m=6, n=7, т.е. длина 2. Тогда середина будет 6 по вашей формуле. А теперь цикл Код: plaintext 1. Сколько итераций будет выполнено? Надеюсь вам не нужен ПК и компилятор чтобы ответить на этот вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 16:02 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Ага, все, заработался я. n это не последний символ, а последний + 1. Тогда формула верная. Простите меня :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 16:06 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТогда формула верная Рано покаялся. :) Все равно (m+n-1)/2 не верная формула. Если m=6, n=8, то середина будет все равно 6 по этой формуле, а должна быть 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 16:09 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut А почему j увеличивается на двое не понятно что применение инкремента в индексе невозможно? Знаки препинания ставить надо, а то поток сознания какой-то. Почему два раза: я тебе красным выделил почему. stutприменение инкремента в индексе невозможно? Возможно. То что невозможно - не скомпилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 16:21 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutmayton,m-начало слова; n-1-конец (слово ворд в строке 6;10). Тогда середина (m+n-1)/2 (тогда середина ворда-8-которая не меняется. А если бы слово было на букву короче тогда-7,5=7 как целое тогда меняется лиш первая буква выходит за середину надо брать (m+n)/2 ). Можно j и не брать ибо я беру относительно начала строки. И когда я ввел j-ничего не поменялось. Ошибка может быть что как раз за пределы слов все эти изменение происходят ибо програма при запуске виснет. А почему j увеличивается на двое не понятно что применение инкремента в индексе невозможно? пк под рукою нет потому проверить не могу?// у меня вообще инф. не было в таком класе, тем более С, и это мне нужно как раз не для школы и не только не для школы. Когда работаешь со строками - придерживайся принципов: 1) Символы нумеруются с нуля. Работаем не с байтами а с сущностями char, wchar, TCHAR.... e.t.c. Такой-же берём API. 2) Берём стандартные функции. Они оттестированы и дают хотя-бы адекватный error_state в случае ошибок. В них также по меньший риск получить vulnerability чем в твоих самодельных функциях. 3) Строки заканчиваются всегда '\0'. Если где-то не заканчиваются - то это не строки. 4) При ВСЕХ строковых операциях с диапазонами - берут полуоткрытый интервал вида [m;n). Тоесть yourstring.substring(m,n) означает что нужно взять под-строку с m- позиции включительно по n- позицию не включая хвост. Альтернативный вариант n- задаёт длину подстроки. 5) Большая часть функций (99.9%) которые хотят модифицируют строку - должны работать с аргументом как immutable/const. Для упрощения return используй шаблон std::string. Тоесть аргумент - не изменять. Возвращай изменённую строку как новую сущность. Возможные споры о performance имеют место, но их надо обсуждать отдельно. Это как раз (0.1%) тех самых редких случаев. В некоторых случаях например можно вообще строку не изменять а возвращать особый итератор который делает fetch символов в реверсном порядке и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 16:24 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Код: 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. ---даже так- не работает - то есть дело не в замене букв. Выходит что код после первого ФО не работает вообще Ибо был сместил m=n+1; на скобку ниже и возвратило первоначальную строку. Хотя теперь даже это не идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 17:30 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut, сделай reverse только для 1 слова. И оттестируй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 17:39 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Там есть и другие ошибки. Но основная здесь (об этом еще master_ziv в самом начале намекал): Код: plaintext 1. Функция пытается модифицировать строковый литерал, который скорее всего readonly - и крашится. вместо этого должно быть так: Код: plaintext 1. 2. 3. Т.е. копируем строку во временную переменную, там выполняем реверс, а потому удаляем временную переменную. Остальные ошибки (из очевидных): 1) Условие line[i]=='\0' никогда не выполнится т.к. условие цикла i<l. Должно быть i<=l, иначе последнее слово не найдется. 2) m=n+1 присваивает мусор, т.к. n содержит верное значение только внутри if Перенести внутрь if. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 18:01 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Так бы сразу что рид-онли. Но думаю эту темпоральную переменную как раз в функции надо и использовать. Ей присваивать измененные значение лайна а потом возвращать в конце функции. Если добавить ваш кусок то работает. Даже без free(temp). Ибо для этого надо еще какую то библиотеку подключать. Хотя мой вариант разворота слова работает лиш до середине слова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:01 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutДаже без free(temp). Ибо для этого надо еще какую то библиотеку подключать. предвижу, что вскоре здесь на форуме появится пилотная реализацию и функции free от stut-a. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:07 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий Широковпредвижу, что вскоре здесь на форуме появится пилотная реализацию и функции free от stut-a. Зачем? Без нее же "работает" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:09 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut, Используйте класс std::string из C++ для работы со строками, тогда не надо будет выделять и освобождать временный буфер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:13 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковstutДаже без free(temp). Ибо для этого надо еще какую то библиотеку подключать. предвижу, что вскоре здесь на форуме появится пилотная реализацию и функции free от stut-a. И malloc с "хвостиками"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:23 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Может лучше так Код: plaintext 1. 2. Зачем грузить студента лишними подробностями если он основное не понимает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:42 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Я бы даже так упростил Код: plaintext 1. 2. 3. 4. [/quot] Кому-то изначальная запись фигня, а кому-то по неопытности может мозг взорвать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:46 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima TМожет лучше так Код: plaintext 1. 2. Зачем грузить студента лишними подробностями если он основное не понимает ? Я с этим согласен. strdup был использован, т.к. инициализировать массив можно только литералом, а если строка например передана в качестве аргумента char* то с массивом такое уже не проканает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 19:53 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Может проще было создать после int m, n; int l=strlen(line); также char *temp--и выделить память tеmp=nеw chаr [l] потом -- иф лайн[i]==пробел то и темп[i] и т.д. ..темп[j]=лайн[d--]. Чуобы доходило до конечного знака в строке лутше написать i<l+1;// strdup- функция все же нестандартная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 22:06 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutstrdup- функция все же нестандартная здрасте, стандартнее некуда Но мысль выделять память в функции и возвращать ее имеет право на жизнь (хотя я бы так не делал). Главное при вызове помнить что после всего надо освободить память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 23:00 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
--да я выделил мемори, но не освобождал и получилось то что надо, без не очень стандартных функциий. То есть надо было подсказать что надо сделать еще одну сисвольную переменную для изменненой строки, да и идти до средины слова выявляется плохая идея при реверсе самого слова?? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 23:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stut, попробуй разбивать задачу на подзадачи: поиск слов и собственно реверсирование слова, тогда код и читать проще, и находить проблему легче. разбери как работает следующий пример Код: 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. вывод Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 02:12 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
A что значит for(; b<--e;++b) там ведь h-вводится. И что там начальное в цыкле fоr-и почему b должно быть меньше и от е точнее еще на 1 уменьшенное. Почему в двох параметрах идет речь о пре-крементах. И самое главное: что значит возвратить h он же b равен. И иак это влияет на использование в функции реверса в строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 06:34 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
stutИ что там начальное в цыкле fоr-и почему b должно быть меньше и от е точнее еще на 1 уменьшенное. Потому что автор немного отступил от своего же описания Анатолий Широковсобственно реверсирование слова Тут reverse(char *b, char *e) переворачивает последовательность символов с пробелом (или нулем) в конце, т.е. "e" указывает не на последнюю букву слова, а на символ за ней, поэтому хитрость с "--e" нужна чтобы этот последний символ не трогать. stutИ самое главное: что значит возвратить h он же b равен. b меняется и в конце h != b stutИ иак это влияет на использование в функции реверса в строке? В данном конкретном случае никак, h тут вообще лишний. Можно тип функции сделать void и убрать char* h = b; и return h; Такой подход классический для работы со строками чтобы удобно было комбинировать несколько функций в одном выражении. Например сравнить два перевернутых слова Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 07:25 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Наконец-то я могу выложить свой способ :) Я написал его вчера, и не исправил его полностью, то есть там есть ещё что-то кроме указателей. Сейчас буду править Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 07:35 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_T, а Анатолий Широков уже видимо сделал всё на указателях .. Анатолий Широков// реверс последовательности символов, заданной полуоткрытым диапазоном [b, e) Хороший комментарий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 07:41 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНаконец-то я могу выложить свой способ :) Ты не ту задачу решил. Близко к исходной, но не ту. Задача стояла "функция реверса каждого слова строки", а ты сделал вывод каждого слова наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 09:21 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_Tфункция реверса каждого слова строки т.е. чтобы я перезаписывал в память для этой-же строки значение её реверса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 09:29 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima_Tфункция реверса каждого слова строки т.е. чтобы я перезаписывал в память для этой-же строки значение её реверса? да, записать реверс поверх исходного слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 09:35 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Да, она не возвращает значение, даже неявно не возвращает, и вчера про это думал целый день. Решил её не переделывать. Мне показалось что для данной задачи лучше читать память по другому, нежели менять значение строки. Впрочем для самообразования напишу функцию которая делает реверс сама в себя. Но я хочу придумать другой алгоритм. Сначала таким-же, а потом другой. Будущий алгоритм напоминает мне часы. Шестерни точнее. Я хочу вставлять эту строку в паззл и толкать её, там где будут отдельные слова, будут шестерни, я кручу строку по кругу и всё становится на свои места. И всё равно должен быть алгоритм ещё лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 09:57 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:00 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima T, Я не отступал от своего комментария // реверс последовательности символов, заданной полуоткрытым диапазоном [b, e) Где ты нашел отступление? b входит, e не входит в полуоткрытый диапазон. stut, Идея реверса состоит в движении двух указателей b и e на встречу друг другу, а обмен имеем смысл пока указатель на начало b меньше указателя на конец e. В силу того, что e не входит в диапазон и рассматривается как терминатор последовательности мы сначала его уменьшаем на единицы, а только потом обращаемся к содержимому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:02 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury, круто, рисуй ещё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:13 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНаконец-то я могу выложить свой способ :) Я написал его вчера, и не исправил его полностью, то есть там есть ещё что-то кроме указателей. Сейчас буду править Код: plaintext 1. 2. Когда ты придумываешь имена для функций в С++ - нужно их наполнять смыслом. Это никакой не реверс. Это по смыслу - printReverse() или reversePrint(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:15 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковDima T, Я не отступал от своего комментария // реверс последовательности символов, заданной полуоткрытым диапазоном [b, e) Где ты нашел отступление? b входит, e не входит в полуоткрытый диапазон. я про твою исходную постановку задачи 15586620 Анатолий Широковпопробуй разбивать задачу на подзадачи: поиск слов и собственно реверсирование слова Как мне показалось эта небольшая нестыковка вызвала непонимание. Комментарий полностью соответствует тому что функция делает. Тут я ничего против не писал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:18 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima T, Да, вроде, все понятно, слово можно задать полуоткрытым диапазоном, а можно открытым. Все равно это будет реверс слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:23 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryя кручу строку по кругу и всё становится на свои места Это тебе не поможет (насколько я понял твои картины) по кругу это так abc => bca => cab => abc Изобретай шестерню другой системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:25 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Тут еще до кучи можно поднять вопрос скорости. Раз уж мы в общем случае должны скопировать аргумент в буфер, то было бы логично вместо копирования и последующего реверса по месту делать копирование одновременно с реверсом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:46 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryя кручу строку по кругу и всё становится на свои места Это тебе не поможет (насколько я понял твои картины) по кругу это так abc => bca => cab => abc Изобретай шестерню другой системы В перспективе - это PPM архиватор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 10:57 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Вообще я должен сказать, что вы все подходите к решению проблемы недостаточно масштабно. Нет размаха.... Как надо это делать? Составить словарь всех слов, с их реверсами. Выделить в тексте слова, найти по словарю и заменить на реверс. Вещь как надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 11:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Словарь? Опять Стебелёк нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:12 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Ну и без лексера и парсера не обойтись. А то как составить синтаксическое дерево слов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:30 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Анатолий Широков Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. допустим: Код: plaintext 1. Я пытался сделать следующее: Код: plaintext 1. Не могу понять в чём проблема. Мне кажется я что-то упустил или забыл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 07:39 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
И почему-то адрес с которого начинается "Hello" всегда заканчивался 8.Хотя это может быть совпадение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 07:46 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНе могу понять в чём проблема. Мне кажется я что-то упустил или забыл. Конкретнее надо писать что именно не получается. Тут телепатов нет. Как минимум ты неверно вызываешь reverse(), т.к. указатель конца надо не НА последний, а ЗА последний символ, т.е. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 07:46 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Происходит проблема с доступом к памяти. Адрес конца не принципиален, отрезок в любом случае сужается. Дело не в этом, пусть будет инверс в подстроке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 07:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПроисходит проблема с доступом к памяти. Ты вышел за пределы строки и обратился по адресу где нет реальной памяти. Смотри пошагово с какими параметрами ты reverse() вызываешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 08:03 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Вы уверены наверняка что дело в этом ?В том что я выхожу за пределы памяти для строки "Hello" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 08:35 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. Не заметил сразу, тут косяк, у тебя "Hello" это массив констант и писать туда нельзя. Объявляй как свой массив: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 08:49 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВы уверены наверняка что дело в этом ?В том что я выхожу за пределы памяти для строки "Hello" ? Я наверняка уверен что не обладаю телепатическими способностями. Учись информативно свои вопросы задавать. Примерно так авторЗапускаю код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Получаю ошибку "Unhandled exception at 0x004113e0 in Reverse.exe: 0xC0000005: Access violation writing location 0x00415740." на строке Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 09:02 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Хорошо, извините за плохую постановку вопроса. Но я ведь не писал const char*. Почему он константный ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 09:27 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryХорошо, извините за плохую постановку вопроса. Но я ведь не писал const char*. Почему он константный ? По жизни он константный. Более того, если бы ты пользовался более другим композитором, у тебя бы это даже не скомпилировалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 09:31 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryХорошо, извините за плохую постановку вопроса. Но я ведь не писал const char*. Почему он константный ? Вообще странно... Вроде бы последняя версия VC, должны были они там уже отключить эту фичу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 09:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryХорошо, извините за плохую постановку вопроса. Но я ведь не писал const char*. Почему он константный ? ты написал chаr* temp - компилятор тебе выдал 4 байта под этот указатель. Вот эти 4 байта и меняй как хочешь. Например temp = NULL char temp[]="Hello" это ты просишь выделить тебе 6 байт под массив и записать туда {'H', 'e', 'l', 'l', 'o', 0} тут ты имеешь полное право менять содержимое этого массива ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 09:45 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему он константный ? потому что компилятор разместил строку "Hello" в области памяти помеченной как read-only, поэтому попытка туда что либо записать вызывает ошибку. Подробнее узнаешь когда доберешься до изучения устройства виртуальной памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 09:50 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryХорошо, извините за плохую постановку вопроса. Но я ведь не писал const char*. Почему он константный ? Это компромисс на который пошел Страуструп, чтобы обеспечить компилируемость старого Си-шного кода. Пишешь Код: plaintext 1. Подразумеваешь Код: plaintext 1. Ведь "Hello" это строковая константа, которая будешь размещена в read-only сегменте и изменять которую ты не имеешь право. Вообщем, приобрети "Дизайн и эволюция языка С++" Страуструпа, ее сейчас переиздали. Много интересного узнаешь почему та или иная языковая конструкция выглядит так или иначе. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 10:20 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков, Не надо мозг парить неофиту заумными книгами. Я вообще ее не читал никогда, думаю, немного потерял. Все, что там написано, вполне очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 10:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZivЯ вообще ее не читал никогда, думаю, немного потерял. Все, что там написано, вполне очевидно. Ильюша, иди в жопу. Это отлична книга. Если ты что-то не читал это не повод для гордости. "Я понятно объясняю?" (c) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 10:42 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Да, действительно очень хорошая книга, многое приходит в порядок послее ее прочтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 11:07 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
PPS. Книга совсем не заумная, написана очень простым располагающим к чтению языком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 11:09 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
sherzod_PPS. Книга совсем не заумная, написана очень простым располагающим к чтению языком. Ребята, я всё понимаю. Светило, и вообще, Страустрап -- наша фсё! Но по тематике С++ (и не только) для меня лично есть дофига книг, которые я хочу прочитать. И данная -- далеко не самая полезная. Меня лично она вообще не интересует -- книга в виде биллетристики, о том, "как я сделал это". Он сделал хорошо, я всё это и так знаю. Детали мне не иснтересны, я 80% их и так знаю. Хотя... Пожалуй, я хотел бы одну вещь выяснить. А именно, как в С++ попали шаблоны. Ну да попали -- и попали, наплевать, как. В итоге получилось что получилось, другого не будет. Но ЕМУ то это всё зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 11:50 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Толик. Вдохни глубоко. А-то скипетр власти оттягивает руку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:38 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonТолик. Вдохни глубоко. А-то скипетр власти оттягивает руку... Все в порядке, он уже понял свою ошибку. А ты что, хотел Илью забанить, да? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:45 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZivНо ЕМУ то это всё зачем? Беллетристика очень помогает разложить по полочкам. SashaMercury видно что нуждается как раз в этом, ибо технических деталей уже нахватался, но пока все вместе не состыковал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковmaytonТолик. Вдохни глубоко. А-то скипетр власти оттягивает руку... Все в порядке, он уже понял свою ошибку. А ты что, хотел Илью забанить, да? ;-) На неужели? А в чём была его ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 12:55 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonАнатолий Широковпропущено... Все в порядке, он уже понял свою ошибку. А ты что, хотел Илью забанить, да? ;-) На неужели? А в чём была его ошибка? Ну как же, решил права покачать на правах старшего - типа он де лучше знает кому и что читать. Но он так больше не будет. Простим его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 13:27 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Вышел с телефона, неудобно цитировать, потому спрошу так. Исходя из каких логических соображний, или как это помогло совместимости с Си ? Я читал в КиН что объявление выше аналогично char temp[]. Спасибо что вы советуете книги, я выписывают их на последнюю страницу тетради по Си. Когда изучу КиН начну читать алг тр для программиста и одну книгу по Си параллельно.. И еще, в последнее-время я мало думал. Но вопрос по реверсу так и остался. Есть ли другой, радикально черный цвет для решения данной задачи ? Всем спасибо за ответы C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 15:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
КиР* Не знаю почему не так написал выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:05 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Читай внимательно. Ты перепутал. Они говорили, что нет разницы между char s[] и char* s когда это формальные параметры функции K&R5.3 ... As formal parameters in a function definition, char s[]; and char *s; are equivalent; we prefer the latter because it says more explicitly that the variable is a pointer а при объявлении это две разных сущности: K&R5.5 .... There is an important difference between these definitions: char amessage[] = "now is the time"; /* an array */ char *pmessage = "now is the time"; /* a pointer */ SashaMercuryЕсть ли другой, радикально черный цвет для решения данной задачи ? О чем ты пытаешься спросить? "Ты не умничай, пальцем покажи" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:36 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
да, вспомнил, я ошибся насчет КиР. Вы правы ! Пересматривал 12 стульев недавно, и запомнилась фраза про радикально черный-цвет усов :D Есть ли другой метод ? Я не хочу идти даже до половины строки для реверса, я хочу сделать это в 10 раз быстрее и не в лоб. Как ? Это возможно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:41 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
И еще. Моя функция rev_each_word выше читает память по другому, и делает printf. Как написать функцию kat которая будет принимать имя функции rev_each_word , и записывать в строку все printf от нее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:47 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ не хочу идти даже до половины строки для реверса чудес не бывает, нужен алгоритм. Предложи алгоритм как перевернуть последовательность из 5 элементов меньше чем за 2 действия, при этом за один шаг менять можно только любые два. 12345hello Вышеописанные алгоритмы (<=> значит обменять значения) Шаг 1. [1] <=> [5] Шаг 2. [2] <=> [4] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:55 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryда, вспомнил, я ошибся насчет КиР. Вы правы ! Пересматривал 12 стульев недавно, и запомнилась фраза про радикально черный-цвет усов :D Есть ли другой метод ? Я не хочу идти даже до половины строки для реверса, я хочу сделать это в 10 раз быстрее и не в лоб. Как ? Это возможно ? конечно возможно с помощью оптического процессора - один квант и отражение от зеркала дает реверс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Сейчас, как я понял, для реверса нужно n/2 итераций по две замены в каждой, кстати, может быть быстрее 1 итерация с n заменами сразу, но не суть. Возможно для n= 10^20 f e существует другой алгоритм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:04 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
У меня уже закрываются глаза..завтра буду читать про квант. Спасибо всем C: Спокойных выходных :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:07 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ еще. Моя функция rev_each_word выше читает память по другому, и делает printf. Как написать функцию kat которая будет принимать имя функции rev_each_word , и записывать в строку все printf от нее ? Можно, но это очень нездоровый путь, т.к. писать выведенное надо будет в другое место (другой массив), проще сразу писать в другой массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:14 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryзавтра буду читать про квант. Так мы тебя лет на ...дцать потеряем Вот тебе пища для размышлений на выходные :) Изучай рекурсию Код: 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. Красиво, но неэффективно с точки зрения производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:24 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСейчас, как я понял, для реверса нужно n/2 итераций по две замены в каждой, кстати, может быть быстрее 1 итерация с n заменами сразу, но не суть. Возможно для n= 10^20 f e существует другой алгоритм Как бы меньше чем за O(N) не получится. N или N/2. Это конечно хорошо бы формально доказать, но так навскидку вполне очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 20:13 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZiv, что здесь формально доказывать, что нужно (int)(N/2) обменов? Как ни крути, O(N) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 20:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Тут не обойтись без гипотезы Пуанкаре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 21:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковMasterZiv, что здесь формально доказывать, что нужно (int)(N/2) обменов? Как ни крути, O(N) Да, что нужно N/2 обменов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:00 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
На ограниченном множестве {X} можно построить дешифратор и минимизировать его. Какой будет O(n) - Х.З. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:02 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonНа ограниченном множестве {X} можно построить дешифратор и минимизировать его. Какой будет O(n) - Х.З. Кстати, а если n операций запустить параллельно в n потоках, то сложность такого алгорима будет уже О(1) или все-таки еще О(n)? Что там математика про распараллеливание говорит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:14 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Теория алгоритмов эту тему не рассматривает. Но есть IMHO смежные области, которые смотрят в Сети-Петри, Марковские процессы и прочее. P.S. И еще IMHO это экстенсивное развиние It. Поэтому неправославно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:34 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, сам запуск N/2 потоков имеет сложность O(N) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 13:51 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZivКак бы меньше чем за O(N) не получится. N или N/2. Это конечно хорошо бы формально доказать, но так навскидку вполне очевидно. Реверс за О(1): Код: plaintext 1. 2. Правда заработает только на армах . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 14:19 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Анатолий Широков Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Я вновь вернулся к вашему коду. Переписал его по своему. Алгоритм хороший. а)Но мне не понравилось что интервал полузакрытый, я понимаю что вы вероятнее всего сделали это для Си-строк, чтобы не учитывать конец строки автоматом. Но всё же, мне кажется лучше функция реверса для закрытого участка байт. б)У K&R тоже реализация через for, но мне кажется while будет красивее, ибо в коде Код: plaintext 1. легче допустить ошибку. Хотя, опять таки это вероятно мне легче допустить ошибку, а для остальных в сообществе это очевидно. Потому в корректности данного комментария я не уверен. И потому это просто моё мнение C: в) обратил внимание на участок кода в for Код: plaintext 1. те фактически я постоянно объявляю новую переменную t, мне кажется что объявление лучше сделать выше. До цикла. В связи с моими наблюдениями я решил переписать код(точнее я написал его до вас, а потом посмотрел как сделали вы, но ничего не работало из константного массива символом, и мне пришлось более детально разобрать и ваш и мой код) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1. Как лучше инициализировать объект char ? (я знаю что все элементы надо/желательно инициализировать) Сейчас попробую кое-что сделать, позже выложу. Заключение: Рассуждения выше, ни в коем случае не есть критика вашего кода. Ибо я понимаю, что вы написали чтобы помочь, и не стремясь к идеалам по качеству кода. Но тем не менее мне интересно имеют ли мои комментарии право на жизнь, либо они идут от того что я пока слишком слабо понимаю Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 04:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
PS Ошибка выше. Забыл убрать char temp в цикле Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 06:40 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
next PS. Лишняя итерация while(start<=end) Надо так. //реверс закрытого промежутка байт [start,end] void reverse(char* start, char* end) //адрес первого и последнего байта { char temp = 'a'; /*1.1-1.2*/ while (start<end) { char temp = *start; *start = *end; *end = temp; ++start; --end; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 06:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryPS Ошибка выше. Забыл убрать char temp в цикле Правильнее оставить его в цикле. Как выше писали не надо давать переменной область видимости больше чем это требует алгоритм. И инициализация (= 'a') не имеет никакой полезной нагрузки, просто будут выполнены бесполезные действия. Твой код работать будет, но лучше так написать Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 07:17 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_TПравильнее оставить его в цикле. Как выше писали не надо давать переменной область видимости больше чем это требует алгоритм. Но я ведь постоянно обновляю новую переменную, постоянно прошу компилятор выделить для неё память ?Или нет ? Я понимаю что лучше объявлять переменную в месте её первого использования, но мне казалось что когда диалог доходит до циклов, это правило немного меняется, и переменную лучше объявить перед началом цикла. Dima_TИ инициализация (= 'a') не имеет никакой полезной нагрузки, просто будут выполнены бесполезные действия. Понимаю Вас. Но может в дальнейшем при поиске ошибок я бы увидел что в какой переменной char всегда хранится 'a', и я подумал бы тогда, я ведь не инициализировал её, в том смысле я бы знал что при объявлении переменных типа char по дефолту будет 'a'(всегд буду инициализировать переменные при объявлении определённым числом/кодом). Может быть это излишки. Дописал функцию принимающую указатель на начало строки и делающую инверсию каждого слова в строке. Код: 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. Теперь нужно внимательно изучить код Анатолия Широкова и ваш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 09:15 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima_TПравильнее оставить его в цикле. Как выше писали не надо давать переменной область видимости больше чем это требует алгоритм. Но я ведь постоянно обновляю новую переменную, постоянно прошу компилятор выделить для неё память ?Или нет ? Нет. Компилятор сам "догадывается" что не надо выделять память каждый раз. Если посмотреть во что компилируются оба варианта то видно что там одно и тоже (при отладке правая кнопка "go to disassembly") Выделение памяти под локальные переменные происходит в момент компиляции, в код вписывается что-то типа "использовать 20ю ячейку стэка под переменную temp", а сам код делает примерно следующее Код: plaintext 1. 2. 3. т.е. в процессе выполнения никаких операций по выделению/освобождению памяти не происходит. Точнее при старте программы выделяется память под стек и далее используется под все локальные переменные. Компилятор просто собирает код так чтобы в 20ю ячейку ничего не было записано пока используется переменная temp. Отсюда также вытекает что объявив temp за циклом ты запрещаешь использовать 20ю ячейку на протяжении выполнения всей функции. В общем пока не заморачивайся. Будешь следить за выделением/освобождением памяти когда явно будешь использовать выделение памяти calloc(), malloc(), new и т.д. SashaMercury... при поиске ошибок я бы увидел что в какой переменной char всегда хранится 'a', и я подумал бы тогда, я ведь не инициализировал её... Инициализируй лучше нулем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 09:47 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
В твоей функции reverse_each_word() лишняя переменная range_e ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 09:50 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_TВ твоей функции reverse_each_word() лишняя переменная range_e Спасибо, и ещё одна ошибка была. Исправил Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 10:03 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСпасибо, и ещё одна ошибка была. Исправил Уверен что все ошибки исправил? Смотри внимательно что в результате получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 10:09 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Угу( Но так уже мне не нравится, не так красиво как раньше. Пока не додумался как обойтись без этой доп проверки, и подглядывать не хочу. Вечером ещё подумаю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 10:19 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Не нашёл что-то "go to disassembly" . В контекстном меню при отладке смотрел. Видимо так смотрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 10:27 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Во время выполнения, когда на брейкпоинте остановится - правая кнопка на коде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 10:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Допустим алфавит состоит из 23 символов. Берём словарь по 4 байта, получаем 23^4 записей. В словаре будет два атрибута, значение и реверс. Делаем классический реверс но уже используя этот словарь. Допустим реверс идёт для текста длиной n. Как мне рассчитать n, для которой данный алгоритм будет давать прирост по времени хотя бы в два раза по сравнению с классическим алгоритмом ? Если я создам словарь для 2 байт, как мне считывать по два байта ? Создать свой тип данных ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 11:17 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_TВо время выполнения, когда на брейкпоинте остановится - правая кнопка на коде Окей, понял :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 11:18 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Чтобы сделать реверс из n символов нужно сделать n операций. Саш. Мир полон замечательных и интересных алгоритмов. Тебе не хочется обсудить что нибудь другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 11:34 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonЧтобы сделать реверс из n символов нужно сделать n операций. Саш. Мир полон замечательных и интересных алгоритмов. Тебе не хочется обсудить что нибудь другое? Да, парень явно завис, зациклился видимо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 12:01 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДопустим алфавит состоит из 23 символов. Берём словарь по 4 байта, получаем 23^4 записей. В словаре будет два атрибута, значение и реверс. Делаем классический реверс но уже используя этот словарь. Допустим реверс идёт для текста длиной n. Как мне рассчитать n, для которой данный алгоритм будет давать прирост по времени хотя бы в два раза по сравнению с классическим алгоритмом ? Если я создам словарь для 2 байт, как мне считывать по два байта ? Создать свой тип данных ? Про словарь это шутка была. Со словарем всегда будет медленнее. Общий размер строки никак не повлияет на скорость, т.к. меняется только алгоритм реверса одного слова. Разбор на слова у тебя остается в обоих случаях. Поиск в словаре тоже требует некоторых вычислений. Этот алгоритм самый эффективный, есть только один способ попытаться ускорить: реализовать этот код на ассемблере, т.е. в командах процессора. Вполне возможно компилятор создал не самый идеальный код. Но тут надо сначала хорошенько ассемблер поизучать. Оно тебе надо? maytonСаш. Мир полон замечательных и интересных алгоритмов. +100500 SashaMercury, поищи себе задачку посложнее. Только эту допили чтоб reverse_each_word() покомпактнее была. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 12:01 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima TЭтот алгоритм самый эффективный, есть только один способ попытаться ускорить: реализовать этот код на ассемблере, т.е. в командах процессора. Вполне возможно компилятор создал не самый идеальный код. Но тут надо сначала хорошенько ассемблер поизучать. Это ты глубоко заблуждаешься. Почему-то все думают, что ассемблер-- такой волшебный язык, на котором всё сразу автоматом начинает работать быстрее. Даже если этот алгоритм записать в виде одной машинной комманды, его стоимость не изменится -- O(n) как было, так и будет. Потому что для ревёрса слова in-place надо переместить n символов слова, для ревёрса слова с копированием в другой буфер, надо скопировать те же n символов слова. Стоимости алгоритмов всегда считаются относительно кол-ва выполнения одной базовой операции. Операция выбирается в зависимости от сущности алгоритма и цели оптимизации. Стоимость данного алгоритма неизменна независимо от того, сколько машинных комманд ушло на программирование этого алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 21:20 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZivDima TЭтот алгоритм самый эффективный, есть только один способ попытаться ускорить: реализовать этот код на ассемблере, т.е. в командах процессора. Вполне возможно компилятор создал не самый идеальный код. Но тут надо сначала хорошенько ассемблер поизучать. Это ты грубоко ошибаешся. Почему-то все думают, что ассемблер-- такой волшебный язык, на котором всё сразу автоматом начинает работать быстрее. Даже если этот алгоритм записать в виде одной машинной комманды, его стоимость не изменится -- O(n) как было, так и будет. Не надо к словам придираться. 1. Стоимость алгоритма величина условная, предназначенная для сравнения эффективности различных алгоритмов (не реализаций). Поэтому в данном случае стоимость алгоритма не изменится: O(n) как было, так и будет. 2. Код (реализация алгоритма) возможно будет работать быстрее созданного компилятором если написать на асме. PS Ассемблер я немного знаю и не утверждал что всё сразу автоматом ускорится. Современные компиляторы достаточно эффективны и надо постараться написать так чтоб быстрее работало. Если заметил - я написал "возможно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 06:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima T, Если написать на ассемблере, операций не станет меньше, и они не станут быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 10:46 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Ладно, я предлагаю уже прикрыть тему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 10:49 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Dima_TТолько эту допили чтоб reverse_each_word() покомпактнее была. К сожалению приходится заниматься порой всякой фигней, вместо того чтобы заниматься программированием ( Как же я хочу заниматься только программированием и математикой, и не заниматься на учебе/работе другой фигней. Потому не всегда получается быстро отвечать. Пять минут назад(снова в душе, что за душ у меня такой ) я подумал об этой задаче буквально 5 секунд и понял как ее допилить. Компилятора сейчас нет (на этой машине), но мне кажется что код ниже будет работать C: Причём до этого я ни секунды не думал со вчерашнего дня именно о том как её допилить, думал про рекурсию, но не про это. Удивляюсь, правильная мысль пришла буквально сразу. Такой код вероятно: Код: 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. mayton, MasterZiv, Dima_T нет не завис. Мне кажется что это фундаментальная задача, и такое долгое понимание того что необходимо n операций для реверса n байт даёт мне более глубокое понимание работы основной массы архитектур машин. Я каждый день ставил под сомнение этот алгоритм, и я не нашёл как по другому. Наверное нужна другая логика работы системы, например добавить градиент(к архитектуре машины) который будет показывать в какую сторону читать память. В любом случае, все ваши комментарии и мои размышления за это время дали результат в виде того что фундамент на котором я стою теперь более устойчив. Спасибо. Вы правы, не нужно зацикливаться, нужно двигаться дальше, но я ни капли не жалею часов потраченных на размышления по данному алгоритму. Главный вывод:Хотеть не вредно, необходимо искать оптимальные решения для каждой задачи исходя из архитектуры машины, и ставить под сомнения каждый алгоритм. Нужно искать оптимальное решение всегда. Побочный/повторный вывод: указатели чудо C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 10:57 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПобочный/повторный вывод: указатели чудо C:добро пожаловать в семью :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 11:36 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury...Такой код вероятно: Так уже хорошо. До компилятора доберешься, маленькую ошибку исправь и завязывай с этой задачей. Ищи следующую :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 11:37 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury, зачем ты переписал мой идеальный reverse? :D зачем ты переписал reverse_each_word, если предложенная мной реализация гибче (пробелы, табуляторы и другие вайтспейсы могут разделять слова в неограниченном количестве стоять перед и после)? хороший совет на будущее, ищи идеал, но используй для этого качественные критерии. ты переписал реверс даже не уточнив критерии, которые ты хочешь улучшить в своей реализации, а это, извини, ребячество. но у тебя все впереди. еще учти, что полуоткрытые диапазоны это основа стандартных алгоритмов стандартной библиотеки алгоритмов. с ними ты будешь сталкиваться на каждом углу. удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 12:30 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury ... Код: 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. Гениально. (я без сарказма). Давно бы так. SashaMercurymayton, MasterZiv, Dima_T нет не завис. Мне кажется что это фундаментальная задача, Есть задачи и гораздо более фундаментальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2014, 16:05 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Dima_Tмаленькую ошибку исправь Вчера про это кстати подумал, и даже сначала так написал, а потом решил что можно оставить как раньше. Должно быть так Код: plaintext 1. egorych, спасибо C: Как-будто бы в мафиозный клан попал :D (я такую фразу слышал в фильмах про итальянских мафиози вроде :DDD) Анатолий Широков, мне просто хотелось сделать это самому ;) Ваш код и код Дмитрия с рекурсией я разберу более детально позднее. Сегодня хочу разобрать следующую главу K&R. MasterZivЕсть задачи и гораздо более фундаментальные. Надеюсь доберусь и до них :) Всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 01:56 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий Широковеще учти, что полуоткрытые диапазоны это основа стандартных алгоритмов стандартной библиотеки алгоритмов Почему именно полуоткрытые ? Закрытый интервал более читаем, так наверное. Неужели из-за индексации массивов с нуля ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 09:57 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury, потому, что это позволяет естественно использовать открытый конец как специальное сигнальное значение. Это позволяет использовать лаконичные интерфейсы, и облегчает реализацию циклов. В возникших вопросах "А можно пример? Можно разъяснить подробнее?" советую разобраться самому (попробовать реализовать некоторые алгоритмы из stl на отрезках, например), это может дать более твердое понимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 11:57 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercury, вообще многие вопросы которые вы задаете, стоило бы обсуждать лет 7-10 назад. Сегодня в них лучше разбираться самому, все это уже везде разжевано, расписано, рассказано. С каждым годом кол-во усваиваемой студентами информации возрастает (было время когда в "ВУЗе" учили умножать). Вы же идете против этого процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 12:02 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Дайте ссылку где это обсосано. Обоснование от вас не услышал. Студенты тупеют духовно, и потому умнеть в плане мат/прог не могут по дефолту. Основная часть. Актуальность вопросов 7-10 лет ? Я рад что вы такого высокого мнение о вопросах ;) Спасибо за комментарий ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 13:26 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДайте ссылку где это обсосано. Обоснование от вас не услышал. Студенты тупеют духовно, и потому умнеть в плане мат/прог не могут по дефолту. Основная часть. Актуальность вопросов 7-10 лет ? Я рад что вы такого высокого мнение о вопросах ;) Спасибо за комментарий ;) Ссылку ищите сами. Не надо плохо думать о студентах. Те которых я знаю, вполне достойные трудолюбивые люди. Пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 13:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Хорошо, поищу. Может быть вы правы и я ошибаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 13:51 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему именно полуоткрытые ? Закрытый интервал более читаем, так наверное. Неужели из-за индексации массивов с нуля ? На закрытом диапазоне нельзя без костылей выразить пустой диапазон. А на полуоткрытом - элементарно, указав два одинаковых индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019647]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
186ms |
get tp. blocked users: |
1ms |
| others: | 306ms |
| total: | 604ms |

| 0 / 0 |
