8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|||||||||||
1 | |||||||||||
ф-ция реверса строки14.05.2013, 10:51. Показов 8702. Ответов 110
Метки нет (Все метки)
был вчера на собеседовании, попросили написать ф-цию реверса строки (поменять местами 1й и последний символы, 2й и предпоследний и т.д.), но ф-ция должна принимать параметром указатель на char т.е. на начало строки и все. я там немного тупанул но написал, вот хочу узнать есть ли решение получше моего.
вот код (писал в Embarcadero RAD Studio (Borland)):
0
|
14.05.2013, 10:51 | |
Ответы с готовыми решениями:
110
Функция реверса строки Написание программы реверса строки Какая ф-ция в VC++ определяет длину строки??? Программа реверса строки: почему на экран выводится мусор, вместо нужного текста? |
Ушел с форума
|
|
14.05.2013, 11:34 | 2 |
А если в строке UTF-8 ?
0
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|
14.05.2013, 11:42 [ТС] | 3 |
незнаю, нубик я еще, сделал как смог)
Добавлено через 4 минуты просто я вот через дебагер смотрел и когда я в 1й строке ф-ции созданному указателью присваиваю указатель на переданную в ф-цию строку то вижу что оба указателя видят строку полностью, а не один символ, как я предполагал, но в то же время узнать длинну строки я не могу, и судя по увиденному через дебаг передавая указатель ф-ция, каким-то образом, принимает и данные о кол-ве символов в строке и что это за символы. Интересно, можно ли как-то выковырять эти данные не передавая их в ф-цию явно.
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
||||||
14.05.2013, 11:51 | 4 | |||||
нет. дебагер просто идет по куску памяти до нулевого символа и показывает содержимое в виде текста
Добавлено через 1 минуту а вообще я бы пару моментов убрал но это не принципиально
0
|
Ушел с форума
|
|
14.05.2013, 11:56 | 5 |
igor001, у Вас в цикле один лишний проход.
Например, перевернуть "abc": сначала "a" поменяется местами с "c", а затем "b" с "b". И потом, разве обязательно делать функцию частью формы ? По-моему, предполагается, что это функция C++, которая может быть использована где угодно - хоть в Builder, хоть в GCC, хоть в Clang, независимо от среды. Добавлено через 34 секунды Пишется reverse.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||
14.05.2013, 11:56 | 6 | ||||||||||
Писать такие задания под GUI билдера вообще довольно сомнительно.
Я бы сделал как-то так (если не заморачиваться про кодировки):
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||
14.05.2013, 12:03 | 7 | |||||
igor001, Шото тебе какое то лоховское задание на собеседовании попалось.
От мое элегантное решение:
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||
14.05.2013, 12:07 | 9 | |||||
Господа почему то когда я пытаюсь из функции вернуть char* у меня крякозябры получаются, а если из самой функции вывожу, то вроде все нормально передается, в чом ошибка?
0
|
Ушел с форума
|
|
14.05.2013, 12:09 | 10 |
Потому что возвращается указатель на временный объект.
Функция завершилась, объект удален. А указатель на него остался.
1
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||
14.05.2013, 12:17 | 12 | |||||
А ну да, ну да отак все нормально:
Ну видишь так тоже как я выше сделал указатель на локальный объект вернулся но он не уничтожился, хотя new создает глобальные объекты скорее всего.
0
|
Ушел с форума
|
|
14.05.2013, 12:19 | 13 |
Зачем так сложно ? Строковые объекты, циклы, лишние вычисления длины и
в конце концов возврат динамически выделенного буфера, который еще неизвестно кто будет освобождать... Да, еще там ошибка переполнения буфера.
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
14.05.2013, 12:28 | 14 |
igor001, Ну как прошол собеседование? Я кодато тоже проходил токо по С там задания простенькие были, там мне после него предложили питон учить со стипендией в 200 долларов, я тогда отказался мб зря, наверно заметили, что я шото шарю от и предложили, если б по С++, то я б согласился не раздумывая, а так питон с нуля начинать, хоть и не бесплатно ну его нафиг. Это одно было собеседование простенькое, а так сразу задания присылали тоже простые, но там оконные приложения нужно было делать, а я не шарю как, хотя задания простые очень были.
Добавлено через 2 минуты Наоборот мне так проще. Да можно string просто принимать и возвращать string. Добавлено через 1 минуту А что за переполнение буфера? вродеж длинны кургом совпадают c_str возвращает строку с нулем, а динна str равна новой строке. Добавлено через 59 секунд Ну да тут нужно плюс 1 добавить char* obcj=new char[strlen(str)]; чтобы 8 символов было
0
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
||||||
14.05.2013, 12:31 [ТС] | 15 | |||||
действительно, лишняя итерация и строка, так лучше будет:
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||||||||||
14.05.2013, 12:48 | 16 | ||||||||||
А чо тут от в этом коде длинны разные получаются?
igor001, Я тоже winapi не знаю, а для того чтобы устроится winapi это в первую очередь знать нада. igor001, А я как видишь прошол, мне говорили задание на 3 часа сиди делай, а я меньше чем за час сделал, потом звонили питон предлагали учить, видно увидели шо шарю . Да я отказался у меня работа не бей лежачего и больше чем 200 долларов. Добавлено через 2 минуты Запомни плохих решений нет! Если работает это уже хорошее решение. Если б не работало тада да плохое. Это тебе я как Гуру С++ говорю. Добавлено через 6 минут Я б отак бы делал и не было б проблем с буферами и всякой фигней и очень просто. Просто подстраивался под задания ТС типо функция должна принимать char*
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.05.2013, 13:14 | 17 |
Нет. Тогда это вообще не решение, а плохое работает, но медленно медленно и/или перерасходует память.
0
|
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
|
|
14.05.2013, 13:16 [ТС] | 18 |
работать то оно может и хорошо что работает, вопрос в том как оно работает + ты не понял задачу. лан, это походу бесполезно.
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||
14.05.2013, 13:43 | 19 | |||||
А я понял просто через указатель значение строки изменить без возврата новой строки отак:
0
|
vxg
|
14.05.2013, 14:04
ф-ция реверса строки
#20
|
0
|
14.05.2013, 14:04 | |
Защита от реверса ( md5 ) Реализация реверса массива Защита от реверса проекта Ошибка в создании реверса массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |