#include <stdio.h>
#include <string.h>
// Helper function to reverse a single word
void reverse_word(char *word, int len)
{
for (int i = 0, j = len - 1; i < j; i++, j--) {
char tmp = word[i];
word[i] = word[j];
word[j] = tmp;
}
}
char * reverse_line(char *line)
{
int word_start = 0; // This marks the index of the first letter of a word
// The loop needs to include the null-terminator '\0'
for (int i = 0; i == 0 || line[i-1] != '\0'; i++) {
// Search for non-letters
// Do the in-place reversal of the word
reverse_word(&line[word_start], i - word_start);
// Update for next word
word_start = i + 1;
}
}
return line;
}
int main(void)
{
char s[] = "Simon liebt Pizza!";
printf("%s\n", reverse_line
(s
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCi8vIEhlbHBlciBmdW5jdGlvbiB0byByZXZlcnNlIGEgc2luZ2xlIHdvcmQKdm9pZCByZXZlcnNlX3dvcmQoY2hhciAqd29yZCwgaW50IGxlbikKewoJZm9yIChpbnQgaSA9IDAsIGogPSBsZW4gLSAxOyBpIDwgajsgaSsrLCBqLS0pIHsKCQljaGFyIHRtcCA9IHdvcmRbaV07CgkJd29yZFtpXSA9IHdvcmRbal07CgkJd29yZFtqXSA9IHRtcDsKCX0KfQoKY2hhciAqIHJldmVyc2VfbGluZShjaGFyICpsaW5lKQp7CglpbnQgd29yZF9zdGFydCA9IDA7IC8vIFRoaXMgbWFya3MgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBsZXR0ZXIgb2YgYSB3b3JkCgkKCS8vIFRoZSBsb29wIG5lZWRzIHRvIGluY2x1ZGUgdGhlIG51bGwtdGVybWluYXRvciAnXDAnCglmb3IgKGludCBpID0gMDsgaSA9PSAwIHx8IGxpbmVbaS0xXSAhPSAnXDAnOyBpKyspIHsKCQkvLyBTZWFyY2ggZm9yIG5vbi1sZXR0ZXJzCgkJaWYgKCFpc2FscGhhKGxpbmVbaV0pKSB7CgkJCS8vIERvIHRoZSBpbi1wbGFjZSByZXZlcnNhbCBvZiB0aGUgd29yZAoJCQlyZXZlcnNlX3dvcmQoJmxpbmVbd29yZF9zdGFydF0sIGkgLSB3b3JkX3N0YXJ0KTsKCQkJLy8gVXBkYXRlIGZvciBuZXh0IHdvcmQKCQkJd29yZF9zdGFydCA9IGkgKyAxOwoJCX0KCX0KCXJldHVybiBsaW5lOwp9CgppbnQgbWFpbih2b2lkKQp7CgljaGFyIHNbXSA9ICJTaW1vbiBsaWVidCBQaXp6YSEiOwoJcHJpbnRmKCIlc1xuIiwgcyk7CiAgICBwcmludGYoIiVzXG4iLCByZXZlcnNlX2xpbmUocykpOwoJcmV0dXJuIDA7Cn0K