Задача с обменом символов в строке - C (СИ)
Формулировка задачи:
Дана строка размером от 5 до 80 символов. Необходимо в соответствии с вариантом написать программу, которая реализует обработку строки. Использовать стандартные функции и операции индексации запрещено.
Длина строки нечетная. Отсортировать строку по убыванию. Вывести результат на экран. После этого обменять местами символы попарно равноудалены от центрального символа и вывести новую строку на экран. Пример: входная строка - ghabtefcd, выходные строки - thgfedcba, abcdefght.
Непонятно как сделать что бы принимал только НЕЧЕТНОЕ количество символов, а так же как обменять их потом местами. Отсортировать сам думаю смогу. Помогите кто может)
Решение задачи: «Задача с обменом символов в строке»
textual
Листинг программы
#include <stdio.h>
int main(void)
{
char str[81];
scanf("%80s", str);
char* pch = str;
while (*pch != '\0')
{
if (pch == str || *(pch - 1) >= *pch)
{
pch++;
}
else
{
char t = *pch;
*pch = *(pch - 1);
*(pch - 1) = t;
pch--;
}
}
puts(str);
pch--;
for (char* i = str; i < pch; i++, pch--)
{
char t = *i;
*i = *pch;
*pch = t;
}
puts(str);
return 0;
}
Объяснение кода листинга программы
Этот код реализует алгоритм обмена символов в строке. Вот список действий, которые он выполняет:
- Ввод строки с помощью функции scanf.
- Инициализация указателя на первый символ строки.
- Начинается цикл, который проходит по каждому символу строки до конца строки.
- Проверка условия: если текущий символ является первым символом строки или следующий символ больше текущего, то происходит обмен символов.
- Если условие не выполняется, то происходит обмен симворов между текущим и предыдущим символами.
- После выполнения обмена символов указатель на текущий символ увеличивается на 1.
- Если текущий символ является последним символом строки, то указатель на него уменьшается на 1.
- Цикл продолжается до тех пор, пока не будет достигнут конец строки.
- Вывод строки с помощью функции puts.
- Указатель на последний символ строки уменьшается на 1.
- Начинается цикл, который проходит по каждому символу строки от начала до конца, меняя местами текущий и следующий символы.
- Вывод строки с помощью функции puts.
- Возврат 0, что означает успешное выполнение программы.