fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. class Solution {
  7. public:
  8. void reverseWords(char *str) {
  9. //char *str = (char*)s.c_str();
  10.  
  11. int n = removeSpaces(str);
  12. reverseEachWord(str);
  13. reverseString(str, str + n - 1);
  14.  
  15. //s.resize(n);
  16. }
  17.  
  18. private:
  19. char *searchNextNonSpace(char *s)
  20. {
  21. while(*s == ' ') ++s;
  22. return s;
  23. }
  24.  
  25. char *searchNextSpace(char *s)
  26. {
  27. while(*s && *s != ' ') ++s;
  28. return s;
  29. }
  30.  
  31. int removeSpaces(char *str)
  32. {
  33. char *curStr = str, *nextPlaceStr = str, *nextSpace = NULL;
  34. int len = 0;
  35.  
  36. curStr = searchNextNonSpace(curStr);
  37. while(*curStr){
  38. nextSpace = searchNextSpace(curStr);
  39. len = nextSpace - curStr;
  40. if(nextPlaceStr != str) *(nextPlaceStr++) = ' ';
  41. memmove(nextPlaceStr, curStr, len);
  42. nextPlaceStr += len;
  43. curStr += len;
  44. curStr = searchNextNonSpace(curStr);
  45. }
  46.  
  47. *nextPlaceStr = '\0';
  48. return nextPlaceStr - str;
  49. }
  50.  
  51. void reverseEachWord(char *str)
  52. {
  53. char* nextSpace = NULL;
  54. while(*str){
  55. nextSpace = searchNextSpace(str);
  56. reverseString(str, nextSpace - 1);
  57. str = searchNextNonSpace(nextSpace);
  58. }
  59. }
  60.  
  61. void reverseString(char *start, char *end)
  62. {
  63. while(start < end)
  64. swap(*(start++), *(end--));
  65. }
  66. };
  67.  
  68. int main()
  69. {
  70. char str[100];
  71. cin >> str;
  72.  
  73. Solution so;
  74. so.reverseWords(str);
  75.  
  76. cout << str << endl;
  77. return 0;
  78. }
Success #stdin #stdout 0s 3348KB
stdin
  This is just a test!  
stdout
Standard output is empty