Из данной строки s создайте строку-палиндром, удвоив и обратив данную строку - C (СИ)
Формулировка задачи:
Упражнение 3. Из данной строки s создайте строку-палиндром, удвоив и обратив данную строку.
Решение задачи: «Из данной строки s создайте строку-палиндром, удвоив и обратив данную строку»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
char * mk_palindrome(char * s) {
char * pIn, * pOut = s + strlen(s);
for ( pIn = pOut; pIn > s; )
*pOut++ = *(--pIn);
*pOut = '\0';
return s;
}
#define WORD_LENGTH (64)
#define get_word(w) ( scanf("%63s", (w)) == 1 )
int main(void) {
char buf[WORD_LENGTH * 2];
while ( printf("Word (max %d symbols): ", WORD_LENGTH - 1) && get_word(buf) )
printf("Result: %s\n", mk_palindrome(buf));
return 0;
}
Объяснение кода листинга программы
- Создаем функцию
mk_palindrome, которая принимает указатель на строкуsи возвращает указатель на новую строку-палиндром. - В функции
mk_palindromeинициализируем два указателя:pInуказывает на первый символ строкиs, аpOutуказывает на последний символ новой строки, которая будет палиндромом. - В цикле перебираем символы строки
sот начала к концу и записываем их в обратном порядке в новую строку, которую указываетpOut. - После завершения цикла добавляем нулевой символ в новую строку.
- Возвращаем новую строку.
- В функции
mainсоздаем буферbufдля хранения введенной строки. - В цикле запрашиваем у пользователя ввод строки с помощью
scanfи выводим результат работы функцииmk_palindromeна экран. - Программа завершается после достижения максимального количества итераций цикла или при нажатии клавиши
Ctrl+D.