|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|||||||||||
ф-ция реверса строки14.05.2013, 10:51. Показов 11848. Ответов 110
Метки нет (Все метки)
был вчера на собеседовании, попросили написать ф-цию реверса строки (поменять местами 1й и последний символы, 2й и предпоследний и т.д.), но ф-ция должна принимать параметром указатель на char т.е. на начало строки и все. я там немного тупанул но написал, вот хочу узнать есть ли решение получше моего.
вот код (писал в Embarcadero RAD Studio (Borland)):
0
|
|||||||||||
| 14.05.2013, 10:51 | |
|
Ответы с готовыми решениями:
110
Функция реверса строки
Какая ф-ция в VC++ определяет длину строки??? |
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
||
| 14.05.2013, 16:38 [ТС] | ||
|
0
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||
| 14.05.2013, 16:55 | |||||||
0
|
|||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 14.05.2013, 16:57 | |
|
Tulosba, Я бы сказал, что это UB, а будет-ли это ошибкой выполнения (или форматированием жесткого диска) зависит от реализации
0
|
|
| 14.05.2013, 17:09 | |
|
0
|
|
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 14.05.2013, 17:19 | |
|
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||
| 14.05.2013, 17:25 | |||
|
taras atavin,
0
|
|||
|
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 6
|
|
| 14.05.2013, 17:25 | |
|
не могу исправит ошибку в вижел студии что надо для этого сделать
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 14.05.2013, 17:35 | ||
|
Добавлено через 2 минуты
0
|
||
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 15.05.2013, 02:00 | ||
|
по стандарту правильный результат сравнения указателей гарантируется только для адресов элементов одного массива
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 15.05.2013, 09:10 | ||
|
0
|
||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|||||||
| 15.05.2013, 09:56 [ТС] | |||||||
|
в общем получился следующий код:
0
|
|||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||||||||||||
| 15.05.2013, 10:14 | ||||||||||||
?еще раз хотелось бы отметить что
кроме того можно выкинуть условия проверки пустой строки если пользоваться инкрементом после указателя.
1
|
||||||||||||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
||||||
| 15.05.2013, 10:38 [ТС] | ||||||
|
vxg, полностью с Вами согласен, это не очень хороший стиль программирования. А сделать чтобы ф-ция возвращала булево значение я решил следуя из тех соображений, что таким образом ф-ция может еще и проверить пустая ли строка и указывает ли указатель на строку вообще, хотя это сокрее всего тоже не есть хорошо, так как работа этой ф-ции лишь изменить строку в соответствии с требованиями.
0
|
||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 15.05.2013, 10:46 | ||
|
Добавлено через 1 минуту ...кроме того теперь в этом нет нужды - раньше вы были вынуждены так делать потому что после подсчета строки получали end_str указывающий на символ после конца строки. теперь в цикле перестановки вы просто можете делать декремент в теле
0
|
||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|||
| 15.05.2013, 11:05 [ТС] | |||
|
vxg, а вот теперь Вы неправы
while(символ) символ? да указатель ++ (сдвинулись и сейчас end_str указывает на '\0') символ? нет break Добавлено через 2 минуты хотя посмотрев в дебагере все еще лучше. В случае пустой строки по указателю находится сразу символ окончания строки, так что оба цикла пропускаются, т.к. условия входа в них не выполняются Добавлено через 4 минуты мб я не очень хорошо умею излагать свои мысли, за это уж простите))
0
|
|||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|||
| 15.05.2013, 11:15 | |||
|
0
|
|||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
||||||
| 15.05.2013, 11:48 [ТС] | ||||||
|
я понял что Вы имели в виду. сначала выполняется "while (*end_str) ++end_str;" т.е. указатель продвигается по массиву до тех пор пока не достигнет терминального нуля, а лишь потом выполняется операция декремента указателя "while (--end_str > str)", т.е. в этом цикле указатели "двигаются" в пределах массива навстречу друг другу (а в пределах массива сравнение указателей по стандарту гарантировано, на сколько я знаю). так что все в порядке
Добавлено через 21 минуту Tulosba, по ссылке в принципе то же самое, но, конечно, с битовыми операциями сильно)) минус переменная. правда все-таки в варианте, который здесь написан, по моему мнению, если сделать переброску символов не через переменную, а битовыми операциями, лучше Добавлено через 3 минуты получается что-то вроде следующего:
0
|
||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||||||||||||
| 15.05.2013, 11:54 | ||||||||||||
иначе
0
|
||||||||||||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|
| 15.05.2013, 11:59 [ТС] | |
|
vxg, запусти у себя эту ф-цию и попробуй сломать, посмотри через дебаг. лично я никаких траблов не смог найти
а проверка указателя нужна на тот случай если кто-нибудь додумается передать в ф-цию нулевой указатель, а все строки в С стиле заканчиваются терминальным нулем, так что передача нулевого указателя в ф-цию это самое опасное что может произойти, по идее))
0
|
|
| 15.05.2013, 11:59 | |
|
Защита от реверса ( md5 ) Реализация реверса массива Защита от реверса проекта Ошибка в создании реверса массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|