#include <stdio.h>
#include <string.h>
void reverse_char_array(char * first, char * last) {
while (first != last && first != --last) {
*first ^= *last;
*last ^= *first;
*first++ ^= *last;
}
}
void reverse_string(char * sentence) {
reverse_char_array
(sentence
, &sentence
[strlen(sentence
)]);}
void reverse_word(char * sentence) {
char * end_s
= &sentence
[strlen(sentence
)], * end_w
= NULL
; while (end_w != end_s) {
if (!(end_w
= strchr(sentence
, ' '))) end_w
= end_s
; reverse_char_array(sentence, end_w);
sentence = end_w + 1;
}
}
int main(int argc, char ** argv) {
char sentence[] = "Shall we all die? We shall die all! All die shall we? Die all we shall!";
reverse_string(sentence);
reverse_word(sentence);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4Kdm9pZCByZXZlcnNlX2NoYXJfYXJyYXkoY2hhciAqIGZpcnN0LCBjaGFyICogbGFzdCkgewogICAgd2hpbGUgKGZpcnN0ICE9IGxhc3QgJiYgZmlyc3QgIT0gLS1sYXN0KSB7CiAgICAgICAgKmZpcnN0IF49ICpsYXN0OwogICAgICAgICpsYXN0IF49ICpmaXJzdDsKICAgICAgICAqZmlyc3QrKyBePSAqbGFzdDsKICAgIH0KfQp2b2lkIHJldmVyc2Vfc3RyaW5nKGNoYXIgKiBzZW50ZW5jZSkgewogICAgcmV2ZXJzZV9jaGFyX2FycmF5KHNlbnRlbmNlLCAmc2VudGVuY2Vbc3RybGVuKHNlbnRlbmNlKV0pOwp9CnZvaWQgcmV2ZXJzZV93b3JkKGNoYXIgKiBzZW50ZW5jZSkgewogICAgY2hhciAqIGVuZF9zID0gJnNlbnRlbmNlW3N0cmxlbihzZW50ZW5jZSldLCAqIGVuZF93ID0gTlVMTDsKICAgIHdoaWxlIChlbmRfdyAhPSBlbmRfcykgewogICAgICAgIGlmICghKGVuZF93ID0gc3RyY2hyKHNlbnRlbmNlLCAnICcpKSkgZW5kX3cgPSBlbmRfczsKICAgICAgICByZXZlcnNlX2NoYXJfYXJyYXkoc2VudGVuY2UsIGVuZF93KTsKICAgICAgICBzZW50ZW5jZSA9IGVuZF93ICsgMTsKICAgIH0KfQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KSB7CiAgICBjaGFyIHNlbnRlbmNlW10gPSAiU2hhbGwgd2UgYWxsIGRpZT8gIFdlIHNoYWxsIGRpZSBhbGwhICBBbGwgZGllIHNoYWxsIHdlPyAgRGllIGFsbCB3ZSBzaGFsbCEiOwogICAgcmV2ZXJzZV9zdHJpbmcoc2VudGVuY2UpOwogICAgcmV2ZXJzZV93b3JkKHNlbnRlbmNlKTsKICAgIHByaW50ZigiJXNcbiIsIHNlbnRlbmNlKTsKICAgIHJldHVybiAwOwp9