Реверсив слово порядка в строке на месте

Я пытаюсь поменять порядок слов в предложении на месте, например:

Эти предложения слов обращаются.

становится

обращено. Слова слов это

Это то, что я имею до сих пор, что почти работает: Я использую функцию strrev, чтобы изменить строку, а затем функцию inprev, чтобы отправить каждое слово в функцию strrev индивидуально, чтобы отменить их обратно в исходную ориентацию, но в обращенном порядке. Отправка указателя для начала и конца функции Strrev может казаться немного глупым, но он позволяет использовать ту же функцию в Inprev (), отправляя указатель на начало и конец отдельных слов.

#include <stdio.h>
#include <string.h>

void strrev(char * start, char * end);
void inprev(char * start);

int main(void)
{
   char str[] = "Foobar my friends, foobar";
   char * end = (str + strlen(str) -1);
   puts(str);
   strrev(str, end);
   puts(str);
   inprev(str);

   puts(str);

   return 0;
}

void strrev(char * start, char * end)
{
   char temp;

while (end > start)
   {
     temp = *start;
     *start = *end;
     *end = temp;
      start++;
      end--;
   }
}

void inprev(char * start)
{
     char * first = start;
     char * spcpnt = start;
     while (*spcpnt)
     {
        while (*spcpnt != ' ' && *spcpnt)
           spcpnt++;
        strrev(start, spcpnt-1);         // removing the -1 sends the space on the 
        start = spcpnt++;                // other side to be reversed, doesn't stop 
                                         // the problem.  

     }

}

Вот выход:

FOOBAR Мои друзья, FOOBAR

RABOOF, SDNEIRF YM RABOOP

FOOBARFURS, мой FOOBAR

Проблема в том, что отсутствие конечного пространства в конце финала Слово означает, что пространство отсутствует между этим словом и предшествующим в конечной строке, и вместо этого брошен на конец последнего слова, которое было первым словом в исходной строке. Отправка пространства на другой стороне слова движется только проблема в другом месте. Кто-нибудь может увидеть решение?

8
задан razlebe 31 August 2011 в 10:10
поделиться