fork download
  1. #include <stdio.h>
  2.  
  3. int strlen(const char* s)
  4. {
  5. int l = 0;
  6. while (*s++) ++l;
  7. return l;
  8. }
  9.  
  10.  
  11. void reverse(char* str)
  12. {
  13. int i = 0, j = strlen(str) - 1;
  14.  
  15. for(; i < j; ++i, --j)
  16. {
  17. str[i] ^= str[j];
  18. str[j] ^= str[i];
  19. str[i] ^= str[j];
  20. }
  21. }
  22.  
  23. void nulltok(char* str, char tok, int* parts)
  24. {
  25. int i = 0, len = strlen(str);
  26. *parts = 1;
  27.  
  28. for (; i < len; ++i)
  29. {
  30. if (str[i] == tok)
  31. {
  32. str[i] = '\0';
  33. ++(*parts);
  34. }
  35. }
  36. }
  37.  
  38. char* reverse_sentence(char* str)
  39. {
  40. char* tmp = str;
  41. reverse(str);
  42.  
  43. int i = 0, parts = 0, len = strlen(str);
  44. nulltok(str, 0x20, &parts);
  45.  
  46. while(parts--)
  47. {
  48. reverse(str);
  49. str += strlen(str) + 1;
  50. }
  51.  
  52. for(; i < len; ++i)
  53. if (tmp[i] == '\0')
  54. tmp[i] = 0x20;
  55.  
  56. return tmp;
  57. }
  58.  
  59.  
  60. int main(void)
  61. {
  62. char str[] = "dogs like cats";
  63. printf("%s", reverse_sentence(str));
  64.  
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0s 2292KB
stdin
Standard input is empty
stdout
cats like dogs