Допустим имеется слово "элемент"(слово может быть любым), нужно циклически сдвинуть слово вправо на "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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть вот такой кодНемного непонятно, что делает второй цикл while
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Нужно реализовать клиент-серверное приложение для обмена сообщениями между компьютерами (простой чат), используя при этом UDP пакеты и только...
У меня есть три окна: MainWindow, SelectPreset, PresetОкно SelectPreset вызывается из окна MainWindow