Обменять местами чётные символы и добавить их номера
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Помогите, пожалуйста, не могу найти необходимые команды для того чтобы поменять четные символы местами и добавить их номера в исходной строке. Задача: Запросите у пользователя две строки длиной от четырёх до двадцати символов. Поменяйте чётные символы между строками и после каждого чётного символа добавьте его номер в исходной строке. Сформируйте и напечатайте результирующую строку. Пример - исходные строки "Первая", "Пять", результирующая - "Пя2рь4ая6Пе2тв4".
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Поменял название темы. Старое было неиформативным.
Наверное, имелись в виду не команды, а функции. Готовой функции, которую можно было бы вызвать и она бы всё сделала, нет - слишком сложная и, в общем-то, бесполезная функциональность была бы в ней, существуй такая функция.
Писать придётся руками. Я предлагаю следующий алгоритм:
1. Считываем строки.
2. Вычисляем правую границу, до которой нужно бежать в цикле, как минимум из двух длин входящих строк.
3. Запускаем цикл от 0, до тех пор, пока счётчик меньше правой границы, шаг счётчика - 2. В цикле меняем местами символы с текущим индексом через временную переменную.
4. Создаём результирующий массив символов (то есть строку) достаточно большой длины, чтобы поместился длинный ответ.
5. Пробегаем первую строку посимвольно и добавляем в конец резульрующей строки текущий символ. Если индекс текущего символа больше кратен двум (используем оператор %, вычисляющий остаток от деления), то ещё и добавляем номер в конец результирующей строки. Номер можно получить, вызвав функцию ltoa, или через sprintf.
6. Делаем то же самое со второй строкой. Так как результрующая строка не очищается, то данные второй строки допишутся после данных первой.
7. Выводим результирующую строку.
Наверное, имелись в виду не команды, а функции. Готовой функции, которую можно было бы вызвать и она бы всё сделала, нет - слишком сложная и, в общем-то, бесполезная функциональность была бы в ней, существуй такая функция.
Писать придётся руками. Я предлагаю следующий алгоритм:
1. Считываем строки.
2. Вычисляем правую границу, до которой нужно бежать в цикле, как минимум из двух длин входящих строк.
3. Запускаем цикл от 0, до тех пор, пока счётчик меньше правой границы, шаг счётчика - 2. В цикле меняем местами символы с текущим индексом через временную переменную.
4. Создаём результирующий массив символов (то есть строку) достаточно большой длины, чтобы поместился длинный ответ.
5. Пробегаем первую строку посимвольно и добавляем в конец резульрующей строки текущий символ. Если индекс текущего символа больше кратен двум (используем оператор %, вычисляющий остаток от деления), то ещё и добавляем номер в конец результирующей строки. Номер можно получить, вызвав функцию ltoa, или через sprintf.
6. Делаем то же самое со второй строкой. Так как результрующая строка не очищается, то данные второй строки допишутся после данных первой.
7. Выводим результирующую строку.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.