![]() |
|
Модераторы: bsa |
![]()
|
|
| Arden |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 23.1.2009 Где: Украина, Волынь Репутация: нет Всего: нет |
Задача состоит в следующем: Каждое слово в строке вывести в обратном виде, при этом сохранить порядок слов. Например "меня зовут артём" надо вывести как "янем тувоз мётра". Собственно вот:
Мне показалось, что программа довольно кривая, хоть и работает, поэтому и создал тему. Подскажите, пожалуйста, алгоритм получше. Как работает функция strrev() и что она возвращает? Я так понял что она возвращает адрес указателю и изменяет сам массив? Меня интересует, почему после использования этой функции strrev() и вызове cout<<a выводится только первое слово, но если сместить указатель дальше на количество символов в этом слове, то можно работать с остальной частью массива а? Надеюсь я понятно выразился, если нет, то распишу свою мысль. Если можно еще какие то советы по теме. Спасибо. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
алгоритм прост: в цикле с текущей позиции ищем пробел или 0, переворачиваем строку между началом слова и его концом, и так далее
переворачивать можно на месте или переписывать в другой буфер |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Потому что функция strtok() ставит символ конца строки ('\0') вместо символа разделителя, который вы указали (' ') |
|||
|
||||
| Rififi |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
Arden,
на С++ можно и покрасивше сделать (:
Добавлено через 3 минуты и 53 секунды использование:
Это сообщение отредактировал(а) Rififi - 4.2.2009, 22:05 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а вот на си с результатом в отдельном буффере и со списком разделителей :
|
|||
|
||||
| Arden |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 23.1.2009 Где: Украина, Волынь Репутация: нет Всего: нет |
Ну что то подобное я и сделал
Это объясняет всё над чем я ломал голову Не дорос я еще, похоже, в таких кодах копаться
А ваш вариант разобрал, спасибо большое за ответ и комменты к коду |
||||
|
|||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
а так ни? |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
afanp,
100% undefined behavior во внутреннем цикле |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
Rififi,
работает все ) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Удивительно. Ты же выходишь за границу массива. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
UB оно только до компиляции UB, а готовая прога работает весьма определенным образом
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |