Допустим имеется слово "элемент"(слово может быть любым), нужно циклически сдвинуть слово вправо на "n" символов. Например, на 3 символа - получим "ентэлем". Как реализовать данную операцию?
Если у вас С++ - не преумножайте сущности сверх необходимости - воспользуйтесь обычным rotate
из стандартной библиотеки...
string s = "элемент";
rotate(s.begin(),s.begin()+(s.length()-3),s.end());
cout << s;
См. https://ideone.com/sHRzfU
Если использовать стандартные функции запрещено - используйте метод двойного реверса.
Разбиваете строку на два куска и собираете из них новую строку (правый кусок соединяем с левым), пример (для простоты использования русских буков используется 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
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть вот такой кодНемного непонятно, что делает второй цикл while
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Нужно реализовать клиент-серверное приложение для обмена сообщениями между компьютерами (простой чат), используя при этом UDP пакеты и только...
У меня есть три окна: MainWindow, SelectPreset, PresetОкно SelectPreset вызывается из окна MainWindow