2. Переписать туда кусок исходной строки перед искомыми словами
3. Переписать второе слово
4. Переписать кусок между словами
5. Переписать первое слово
6. Переписать конец строки
7. Удалить старую строку
8. Перенастроить указатель н новую строку
Долго, муторно, но другого способа в Си нет. В языках более высокого уровня можно воспользоваться MergeCollections и конкатенацией строк, но это будет лишь видимая оболчка, внутри всё равно всё будет идти по тому же плану.
Без дополнительных затрат памяти? Хотя бы две темповых переменных - для хранения первого слова и хранения подстроки между словами - хоть тресни, но заводить надо. Это ж не числовые значения, которые в извращённой форме можно обменивать без дополнительной переменной.
Здрасте! А аски код это что? Не цифра? Но я извращения такой степени не подразумевал. Я имел в виду с переменной. И если уж на то пошло, то все-таки дополнительная переменная и дополнительная строка - это разные вещи.
аски-код - цифра, а вот строка - ни разу ни цифра. У них длины разные бывают;о) Дополнительная переменная как таковая тебя не спасёт по вышеуказанной причине, здесь годится только динамический массив. Если сможешь привести пример доказывающий обратное - поименую гуру и при встрече угощу пивом;о)
Может и криво написано (как я уже сказал: думать лень), но замена происходит без дополнительных контейнеров. Ни один байт ни на секунду не покидает строки. Вспомогательными используются два поинтера и два каунтера. Если подумать чуть-чуть, то наверно можно и меньше.
ПС. Поскольку пива я не пью, согласен на чай с вареньем
Снимаю шляпу;о) Я уже после написания комментария додумалась до этой идеи, но запуталась в указателях. Твоё решение действительно полное, изящное и предусмотрены все исключительные ситуации. Хотя стиль непривычный, поначалу тяжеловато читать...
Будешь на Адаре - милости просим в гости;о) Какое варенье ты любишь?
Не надо шляпу снимать. При нынешней погоде можно здорово намокнуть
и предусмотрены все исключительные ситуации
Это я не гарантирую. Даже не пытался напрягаться думать, все ли случаи учтены. Те возможные ошибки, что пришли в голову по ходу - я проверил, но может есть еще.
Хотя стиль непривычный, поначалу тяжеловато читать...
А что мешало читать?
Будешь на Адаре - милости просим в гости;о) Какое варенье ты любишь?
Буду рад Варенье - вишневое с ягодами
Neiru
за идею с triple XOR спасибо)
Пожалуйста Более понятный и читабельный вариант выглядит так:
Мне когда-то тож было непривычно. Но так список параметров выглядит разборчивее и можно к каждому напротив коммент приписать, как и к возвращаемому значению.
и фигурные скобки я иначе ставлю
А это у меня не обоснованная привычка. Перецепил это из Джавы. Мне так удобнее, хотя переносить фигурную скобку в начало следующей строки, пожалуй целесообразнее.
1. Создать новую строку
2. Переписать туда кусок исходной строки перед искомыми словами
3. Переписать второе слово
4. Переписать кусок между словами
5. Переписать первое слово
6. Переписать конец строки
7. Удалить старую строку
8. Перенастроить указатель н новую строку
Долго, муторно, но другого способа в Си нет. В языках более высокого уровня можно воспользоваться MergeCollections и конкатенацией строк, но это будет лишь видимая оболчка, внутри всё равно всё будет идти по тому же плану.
Без дополнительных затрат памяти? Хотя бы две темповых переменных - для хранения первого слова и хранения подстроки между словами - хоть тресни, но заводить надо. Это ж не числовые значения, которые в извращённой форме можно обменивать без дополнительной переменной.
аски-код - цифра, а вот строка - ни разу ни цифра. У них длины разные бывают;о) Дополнительная переменная как таковая тебя не спасёт по вышеуказанной причине, здесь годится только динамический массив. Если сможешь привести пример доказывающий обратное - поименую гуру и при встрече угощу пивом;о)
Кого мы по-русски называем строкой? string? он же char* терминирующийся нулем?
(я не издеваюсь, я просто это добро только на иврите и на инглише привык воспринимать)
Я по некоторым темам (особенно по теории операционных систем) страда. теми же проблемами;о)
Да, имеется в виду классическая строка в стиле Си, т.е. zero-based char*.
Напиши имлиментацию без воспомогательных строк. Я хочу это видеть.
Вот: http://alexei-p.pisem.net/Swap%20Words.zip
Может и криво написано (как я уже сказал: думать лень), но замена происходит без дополнительных контейнеров. Ни один байт ни на секунду не покидает строки. Вспомогательными используются два поинтера и два каунтера. Если подумать чуть-чуть, то наверно можно и меньше.
ПС. Поскольку пива я не пью, согласен на чай с вареньем
Снимаю шляпу;о) Я уже после написания комментария додумалась до этой идеи, но запуталась в указателях. Твоё решение действительно полное, изящное и предусмотрены все исключительные ситуации. Хотя стиль непривычный, поначалу тяжеловато читать...
Будешь на Адаре - милости просим в гости;о) Какое варенье ты любишь?
Идея подобного алгоритма была, но над реализацией не думал.
Снимаю шляпу;о)
Не надо шляпу снимать. При нынешней погоде можно здорово намокнуть
и предусмотрены все исключительные ситуации
Это я не гарантирую. Даже не пытался напрягаться думать, все ли случаи учтены. Те возможные ошибки, что пришли в голову по ходу - я проверил, но может есть еще.
Хотя стиль непривычный, поначалу тяжеловато читать...
А что мешало читать?
Будешь на Адаре - милости просим в гости;о) Какое варенье ты любишь?
Буду рад
Neiru
за идею с triple XOR спасибо)
Пожалуйста
a ^= b;
b ^= a;
a ^= b;
Непривычные заголовки функций, и фигурные скобки я иначе ставлю.
Варенье в воскресенье куплю;о)
Мне когда-то тож было непривычно. Но так список параметров выглядит разборчивее и можно к каждому напротив коммент приписать, как и к возвращаемому значению.
и фигурные скобки я иначе ставлю
А это у меня не обоснованная привычка. Перецепил это из Джавы. Мне так удобнее, хотя переносить фигурную скобку в начало следующей строки, пожалуй целесообразнее.
Варенье в воскресенье куплю
Гуд! Я в Хайфе каждые выходные