Форум программистов, компьютерный форум CyberForum.ru

Инвертировать строку без использования буфера - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Martinz
1 / 1 / 0
Регистрация: 04.01.2011
Сообщений: 37
28.11.2012, 00:44     Инвертировать строку без использования буфера #1
Всем привет. Инвертировать строку с использованием второй строки достаточно просто. А как инвертировать строку без использования дополнительного буфера?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
28.11.2012, 00:50     Инвертировать строку без использования буфера #2
Совсем-совсем без буфера? Ну можно через попарный xor замещаемых символов.
Martinz
1 / 1 / 0
Регистрация: 04.01.2011
Сообщений: 37
28.11.2012, 01:49  [ТС]     Инвертировать строку без использования буфера #3
Хм интересно. А как это с xor можно сделать?
jasi
1 / 1 / 0
Регистрация: 29.06.2012
Сообщений: 5
28.11.2012, 14:41     Инвертировать строку без использования буфера #4
как вариант рекурсивная функция, но там символьный буфер штоб поменять местами либо использовать в этом месте функцию swap которая все равно внутри себя использует буфер

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void invert(char* s, size_t length)
{
    char* last = s + length - 1;
    if(length < 2 )
    {
        return;
    }
    else
    {
        char ch = *s;
        *s = *last;
        *last = ch;
        invert(++s,length-2);
    }
}
Martinz
1 / 1 / 0
Регистрация: 04.01.2011
Сообщений: 37
05.12.2012, 23:30  [ТС]     Инвертировать строку без использования буфера #5
Нашел я решение этой задачки. Смысл в том, чтобы хранить значения обеих переменных в какой-то одной. То есть если есть x = 1, y = 2, то в x мы заносим значения обеих переменных: x = x + y; а затем эти значения из x раскидываем по переменным в обратном порядке. Так как символьные переменные это тоже числа, мы их можем складывать и вычитать без проблем. В итоге код функции будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
    void invert(char s[])
    {
        for(int first = 0, last = strlen(s) - 1; first < strlen(s)/2; first++, last--)
        {
            s[first] = s[first] + s[last];
            s[last]  = s[first] - s[last];
            s[first] = s[first] - s[last];  
        }
    }
Yandex
Объявления
05.12.2012, 23:30     Инвертировать строку без использования буфера
Ответ Создать тему
Опции темы

Текущее время: 14:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru