Я пытаюсь поменять порядок слов в предложении на месте, например:
Эти предложения слов обращаются.
становится
обращено. Слова слов это
Это то, что я имею до сих пор, что почти работает: Я использую функцию 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
Проблема в том, что отсутствие конечного пространства в конце финала Слово означает, что пространство отсутствует между этим словом и предшествующим в конечной строке, и вместо этого брошен на конец последнего слова, которое было первым словом в исходной строке. Отправка пространства на другой стороне слова движется только проблема в другом месте. Кто-нибудь может увидеть решение?