Переставить слова в тексте наоборот

orionx64

И так у нас есть текст из 60 букв, нужно переставить в нем все слова наоборот. Как реализовать программу?
4 ответа

orionx64

#include <stdio.h>
#include <string.h>
void func(char *s) {
    if(s) func(strtok(0, " ")), printf("%s ", s);
}
int main() {    
    char str[64];
    gets(str);
    func(strtok(str, " "));
    return 0;
}
#include <stdio.h>
#include <string.h>
void func(char *in, char *out) {
    if(in) func(strtok(0, " "), out), strcat(out, in), strcat(out, " ");
}
int main() {    
    char str[64], str2[64];
    gets(str);
    func(strtok(str, " "), str2);
    str2[strlen(str2)] = 0;
    puts(str2);
    return 0;
}


orionx64

#include <stdio.h>
 
int main(int argc, char ** argv) {
    if ( argc > 1 ) {
        printf("%s ", argv[--argc]);
        main(argc, argv);
    }
    else
        printf("\n");
    
    return 0;
}
C:\prog\c\strings>gcc reverse_args.c

C:\prog\c\strings>a any many money more
more money many any

C:\prog\c\strings>


orionx64

if(s) func(strtok(0, " ")), printf("%s ", s);
Megageorgio, объясните вот этот момент


orionx64

orionx64, изначально с помощью strtok мы находим слово в строке (первый вызов функции в main), а далее, если использовать 0, то будет находится следующее слово в этой же строке. В приведённом фрагменте кода мы видим, что вызывается эта же функция, которая в свою очередь будет искать следующее слово и вызывать еще раз саму себя, и так до конца строки. После того как конец строки будет достигнут, все функции начнут выводить слова на экран, и делать это они будут в обратном порядке, т.е. сначала последняя выведет слово, потом она завершится и следующая с конца функция сможет продолжить работу и выведет второе слово, и т.д. до первого вызова функции, после чего уже main продолжит свою работу