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);
}