![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Mostick |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.10.2014 Репутация: 1 Всего: 1 |
Здравствуйте! Ровно неделю назад начал изучать мой первый язык программирования с++.
Уровень знаний - до безумия мал ![]() Скачал видеокурс по обучению с++ (Книги просто не понимаю). После каждой темы есть домашнее задание. Мне нужно было в массив char ввести строку, затем вывести в обратном порядке. Собственно вот как я решил эту задачу.
А вот как решил автор домашнего задания.
Подскажите пожалуйста, какой код лучше? И сильно ли плохо у меня получилось? |
||||
|
|||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Я бы объединил оба варианта
А вообще, если пишешь на Си++, а не на Си, то и нужно использовать плюсы, а не аццкую смесь этих двух языков:
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
Mostick |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.10.2014 Репутация: 1 Всего: 1 |
Спасибо большое... Я надеюсь что со временем я все пойму.
|
|||
|
||||
baldina |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
ага.
Mostick, ваш код чуть сложнее, но более эффективен чем у автора. Вы хорошо мыслите, и это отрадно. в С++ есть множество стандартных средств, которые позволяют быстро и хорошо решать типовые задачи. например, std::string с успехом заменяет строковые массивы char[], он более удобен и меньше подвержен ошибкам. а std::swap(a,b) меняет местами a и b, т.е. эквивалентен коду
а std::reverse() обращает последовательность (максимально эффективным способом) понятно, что для тренировки хорошо уметь реализовывать таки вещи самостоятельно. с чем вы отлично справились Добавлено через 5 минут и 34 секунды кстати, для решения задачи "вывести в обратном порядке" совсем нет необходимости переставлять символы. с помощью strlen() вы находите конец строки, а затем идете с конца в начало, выводя по одному символу. попробуйте реализовать такой вариант Добавлено через 11 минут и 27 секунд на с++ с поддержкой стандартной библиотеки это выглядит как
или даже
но вы попробуйте вручную, с использованием обычного массива char[] |
||||||||||
|
|||||||||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
А можно пояснить в чём эффективность? У ТС количество итераций N/2, в каждой итерации 3 операции - итого 3N/2. У автора количество итераций N, в каждой итерации 1 операция + 1 добавлений терминирющего нуля - итого N+1. Или я не прав и чего-то не понимаю? Единственное преимущество заключается в том, что расходуется меньше памяти за счёт отсутствия второй строки. И в этом смысле у ТС алгоритм эффективней. Добавлено через 1 минуту и 35 секунд И да, спору нет, подход ТС мне понравился больше, чем в решении. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |