Inverter a ordem das palavras em uma string (em C)

A maneira mais fácil de inverter a ordem das palavras em uma string é bem simples (pelo menos uma vez que você tenha entendido isso). Vamos pegar uma série de palavras como word1 word2 word3. O primeiro passo é inverter a string inteira, dando a você 3drow 2drow 1drow. O próximo passo é para inverter cada palavra, uma-a-uma, de volta para a sua ordem original: word3 word2 word1.

Esta é uma implementação rápida em C:

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

int word_length(char *str) {
int i;
for (i = 0; *str != ' ' && *str != ''; i++) str++;
return i;
}

void switch_chars(char* one, char* two) {
char temp = *one;
*one = *two;
*two = temp;
}

void substr_reverse(char *str, int len) {
if (len < 2) return;
char *i = str;
char *j = str + len;

for (; i < j; i++, j--) switch_chars(i, j);
}

void reverse_words(char *str) {
substr_reverse
(str, strlen(str) - 1);

while (word_length(str) != 0) {
substr_reverse
(str, word_length(str) - 1);
str
+= word_length(str) + 1;
}
}

int main(int argc, char* argv[]) {
char str[18] = "word1 word2 word3";
reverse_words
(str);

printf
("%sn", str);
}