Anche se hai risolto, ti consiglio un approccio più semplice e pulito:
- scrivi una funzione che riceve due puntatori a char e inverte i caratteri posti tra i due (normalmente si usa un intervallo semiaperto del tipo [begin, end), ovvero il primo puntatore punta al primo carattere da considerare, il secondo ad un carattere dopo l'ultimo);
- il tuo main a questo punto deve soltanto andare alla ricerca di punti nella stringa, e ogni volta che trova un nuovo punto può richiamare la funzione sul range determinato dal punto precedente e dal punto corrente.
codice:
#include <stdio.h>
#include <string.h>
/* Inverte il testo contenuto nell'intervallo semiaperto [begin, end) */
void reverse(char *begin, char *end)
{
/* Si sposta sul "vero" ultimo carattere */
end--;
/* Ripete e avvicina verso il centro della parola i due puntatori
* finché non si "toccano" al centro della parola */
for(;end-begin>=1; begin++, end--)
{
/* Scambia i due caratteri */
char temp=*begin;
*begin=*end;
*end=temp;
}
}
int main()
{
char buffer[256];
/* Acquisisce la stringa da tastiera */
if(fgets(buffer,sizeof(buffer), stdin)==NULL)
return 1;
/* Elimina l'eventuale newline finale */
size_t l=strlen(buffer);
if(buffer[l-1]=='\n')
buffer[l-1]=0;
/* Inizio della parola corrente */
char *wordStart=buffer;
/* Puntatore di lettura */
char *readPtr=buffer;
do
{
/* Se abbiamo trovato un nuovo punto o siamo alla fine della parola */
if(*readPtr=='.' || *readPtr==0)
{
/* Inverti la parola */
reverse(wordStart, readPtr);
/* La prossima parola inizia al carattere successivo */
wordStart=readPtr+1;
}
/* Continua a ciclare finché non è finita la parola */
} while(*readPtr++);
/* Scrive l'output */
puts(buffer);
return 0;
}