|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|||||||||||
ф-ция реверса строки14.05.2013, 10:51. Показов 12013. Ответов 110
Метки нет (Все метки)
был вчера на собеседовании, попросили написать ф-цию реверса строки (поменять местами 1й и последний символы, 2й и предпоследний и т.д.), но ф-ция должна принимать параметром указатель на char т.е. на начало строки и все. я там немного тупанул но написал, вот хочу узнать есть ли решение получше моего.
вот код (писал в Embarcadero RAD Studio (Borland)):
0
|
|||||||||||
| 14.05.2013, 10:51 | |
|
Ответы с готовыми решениями:
110
Функция реверса строки
Какая ф-ция в VC++ определяет длину строки??? |
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||
| 15.05.2013, 13:34 | ||
|
-по адресу на который смотрит указатель лежит ноль (терминатор, строка пустая) -мы пытаемся вычислить длину - цикл подсчета не запускается ни разу потому как мы сразу видим что по адресу на который смотрит end_str лежит ноль - end_str остается указывающим на начало строки -мы входим в условие цикла перестановки и делаем декремент перед сравнением -end_str понижается ниже сегмента и система присваивает ему значение соответствующее верху сегмента -условие выполняется end_str > str и мы входим в цикл -мы переставляем ВСЕ содержимое сегмента до тех пор пока не дойдем до второго от начала строки символа - в этом случае условие --end_str > str не выполнится так как обратиться в равенство и мы выйдем из цикла (если машина к тому времени будет жива)
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 15.05.2013, 13:36 | |
|
vxg, Все, что между " " является строковым литералом. Его тип (говорим сейчас об обычных символах и без конкатенации строк) является const char[n], где n - кол-во символов + '\0' ("qwerty" имеет тип const char[7]), расположенном в статической памяти программы (литерал существует все время работы программы). Если мы присваиваем его адрес к char* - мы имеем полное право менять символы, на которые указывает данный char*, однако если мы попытаемся изменить строковый литерал (НАСТОЯЩУЮ константу) - мы получим UB. Если мы сразу присвоим к const char*, при попытке изменения нас пошлет компилятор и мы не будем ловить клевые ошибки, если мы сразу присвоим к массиву (сделаем КОПИЮ строкового литерала) - мы можем его менять как хотим.
0
|
|
|
|
|
| 15.05.2013, 13:36 | |
|
вот так работает
![]() C++ #include <iostream> #include <cstdio> #include <string> using namespace std ; int main () { string str ("text" ) ; string buf = str ; int len = str. size () ; for (int i = 0 ; i < len ; i ++ ) { str [ i ] = buf [ len - 1 - i ] ; } cout << str << endl ; }
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 15.05.2013, 13:39 | |
|
programina, Конечно, ведь при создании строки происходит копия char* переданного в конструктор.
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 15.05.2013, 13:39 | |
|
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|
| 15.05.2013, 13:39 | |
|
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 15.05.2013, 13:41 | |
|
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||
| 15.05.2013, 13:41 | ||
|
vxg, impl-defined.
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|||||||
| 15.05.2013, 13:48 | |||||||
0
|
|||||||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
||
| 15.05.2013, 13:48 [ТС] | ||
|
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
||||||||||||
| 15.05.2013, 13:55 | ||||||||||||
|
о... нашел. скрипт проекта для WinCC
Добавлено через 4 минуты
0
|
||||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 15.05.2013, 14:02 | |
|
vxg, Самый что ни на есть UB в С++. Он даже не потенциальный.
1
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 15.05.2013, 14:05 | ||
|
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,476
|
|||
| 15.05.2013, 14:06 | |||
|
0
|
|||
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
||
| 15.05.2013, 14:14 [ТС] | ||
|
Добавлено через 6 минут хотя она опасная лишь в том случае, если после сдвига указателя на конец строки он по памяти перейдет за указатель на начало строки
0
|
||
|
|
|
| 16.05.2013, 19:02 | |
|
ВООООООООООООТ ))))))))))))))))
C++ #include <iostream> #include <string.h> using namespace std; char *reverse(char *s) { int l = strlen(s); char b[l]; for(int i=0; i < l; i++) b[i] = s[i]; for(int i=0; i < l; i++) s[i] = b[l-1-i]; return s; } int main() { char s[] = "abcdefghijklmnopqrstuvwxyz"; cout << reverse(s) << endl; }
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 16.05.2013, 19:24 | |
|
programina, не эффективно. И variable length array требуется.
0
|
|
|
Кактус
67 / 67 / 19
Регистрация: 23.05.2012
Сообщений: 342
|
|
| 16.05.2013, 19:41 | |
|
10 страниц комментариев вокруг обычно реверса )) Я конечно еще кибер-титьку посасываю, но это по моему просто катастрофа )) Тут решений кушай не хочу, можно даже свой стринг написать таким образом, что сложность реверса будет O(1), а отличаться от обычного он будет разве, что названием и архитектурой, можно темплейт привязать, тогда крути-верти, что хочешь и так далее.
0
|
|
|
|
||
| 16.05.2013, 19:42 | ||
0
|
||
| 16.05.2013, 19:42 | |
|
Защита от реверса ( md5 ) Реализация реверса массива Защита от реверса проекта Ошибка в создании реверса массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|