Поменять первое слово максимальной длины и последнее слово минимальной длины - C (СИ)
Формулировка задачи:
Отсортировать по убыванию слова любого предложения. Поменять первое слово максимальной длины и последнее слово минимальной длины
Решение задачи: «Поменять первое слово максимальной длины и последнее слово минимальной длины»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
#define swap_type(a, b, t) \
(t) = (a);\
(a) = (b);\
(b) = (t)
//обменять длинное слово с коротким
char* swap_min_max(char* s){
char* p, *p1, *p2, c, *t;
size_t i, n1 = 0, n2 = (size_t)-1;
for(p1 = p2 = NULL, t = s; *s; s = p){
while(*s && ! isalpha(*s))
++s;
p = s;
while(isalpha(*p))
++p;
i = (size_t)(p - s);
if(i > n1){
n1 = i;
p1 = s;
}
if((i > 0) && (i <= n2)){
n2 = i;
p2 = s;
}
}
if((p1 == NULL) || (p2 == NULL) || (p1 == p2))
return t;
if(p1 > p2){
swap_type(p1, p2, p);
swap_type(n1, n2, i);
}
for(i = 0; i < n2; ++i, ++p2, ++p1){
for(p = p2; p > p1; --p){
swap_type(*p, *(p - 1), c);
}
}
for(--p2, i = 0; i < n1; ++i){
for(p = p1; p < p2; ++p){
swap_type(*p, *(p + 1), c);
}
}
return t;
}
int main(void){
char s[] = "Lisp, Snobol, Cobol. [Java]";
puts( s );
puts( swap_min_max(s) );
return 0;
}