Как реализовать циклический сдвиг слова в C++

88
22 апреля 2022, 02:00

Допустим имеется слово "элемент"(слово может быть любым), нужно циклически сдвинуть слово вправо на "n" символов. Например, на 3 символа - получим "ентэлем". Как реализовать данную операцию?

Answer 1

Если у вас С++ - не преумножайте сущности сверх необходимости - воспользуйтесь обычным rotate из стандартной библиотеки...

string s = "элемент";
rotate(s.begin(),s.begin()+(s.length()-3),s.end());
cout << s;

См. https://ideone.com/sHRzfU

Если использовать стандартные функции запрещено - используйте метод двойного реверса.

Answer 2

Разбиваете строку на два куска и собираете из них новую строку (правый кусок соединяем с левым), пример (для простоты использования русских буков используется std::u32string):

#include <iostream>
#include <string>
#include <codecvt>
#include <locale>
int main(int argc, char* argv[]) {
    std::u32string str = U"элемент";
    int n = 4;
    std::u32string result = str.substr(n) + str.substr(0, n);
    
    std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> converter;
    std::cout << converter.to_bytes(result) << std::endl;
}

https://wandbox.org/permlink/ttBzGaWz1s7ykE50

З.Ы. Идеологически более корректно будет использовать rotate из ответа Harry

READ ALSO
Зачем в коде нужна строчка? C++

Зачем в коде нужна строчка? C++

Есть вот такой кодНемного непонятно, что делает второй цикл while

109
работа класса с другим классом(С++, ООП) [закрыт]

работа класса с другим классом(С++, ООП) [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

177
C++ Вопрос по реализации UDP чата

C++ Вопрос по реализации UDP чата

Нужно реализовать клиент-серверное приложение для обмена сообщениями между компьютерами (простой чат), используя при этом UDP пакеты и только...

198
Блокируются элементы дочернего окна в Qt C++

Блокируются элементы дочернего окна в Qt C++

У меня есть три окна: MainWindow, SelectPreset, PresetОкно SelectPreset вызывается из окна MainWindow

185