Поменять первое слово максимальной длины и последнее слово минимальной длины - 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;
}

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы