Как поменять местами первую и последнию букву в каждом слове всего предложения

Добрый день, помогите с код пожалуйста. Язык СИ

с клавиатуры вводить текст, надо сделать чтоб:
1)меняло местами первую и последнюю буквы каждого слова;
б)подсчитывало количество слов в тексте

подсчитывание слов я уже написал, помогите с заменой букв

#include <stdio.h>
#include <string.h>
 
size_t wc(char * str, const char * delim) {
    return ( strtok(str, delim) ) ? 1 + wc(NULL, delim) : 0;
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        printf("%lu word(s).\n", wc(buf, DELIM));
    
    return 0;
}

Советую не пытаться сделать как можно меньше строк и завести побольше переменных, тогда наверняка будет проще разобраться )
И чтение текста чот сложное, он точно должен быть многострочным?

Надо слова сначала получить, с помощью того же strtok например.
Как тут в примере strtok - C++ Reference

Только с ним вроде не получится восстановить разделители (если их много, а не один пробел) при создании новой строки (с помощью strcpy) и исходную строку он тоже портит.

strtok, strtok_s - cppreference.com

This function is destructive: it writes the ‘\0’ characters in the elements of the string

Так что лучше просто в цикле идти по символам, смотреть разделитель или нет, реагировать на начало (не разделитель после разделителя) и конец слова и т.д.
Конечный автомат можно нарисовать )