Продублировать через 1 пробел слова, являющиеся палиндромами четной длины - C (СИ)
Формулировка задачи:
Отредактировать строку, продублировав через 1 пробел слова, являющиеся палиндромами четной длины и содержащими заданную под-строку.
Решение задачи: «Продублировать через 1 пробел слова, являющиеся палиндромами четной длины»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* poly_rep(char* s, size_t N){
char* p, *i, *o, *t = s;
size_t k, l, n = strlen(s) + 1;
while(*s){
while(*s && ! isalnum(*s))
++s;
p = s + 1;
while(isalnum(*p))
++p;
l = (size_t)(p - s);
if(! (l % 2)){
i = p - 1;
o = s;
while((s < i) && (*s == *i)){
++s;
--i;
}
if(s > i){
if((n + l + 1) >= N)
break;
k = (size_t)(o - t);
memmove(p + 1, o, (n - k) * sizeof(char));
*p = ' ';
p += l + 1;
n += l + 1;
}
}
s = p;
}
return t;
}
int main(void){
char s[64] = "KOOK, wow [ABBA], bla 21LL12";
puts(s);
puts( poly_rep(s, sizeof(s)- 1) );
return 0;
}