Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void reverse(char *&word) {
  6.     int len = strlen(word);
  7.     for (int i = 0; i < len / 2; i++) {
  8.         swap(word[i], word[len - 1 - i]);
  9.     }
  10. }
  11.  
  12. char **split(char *sentence, int &N) {
  13.     int k = 0;
  14.     for (size_t i = 0; i < strlen(sentence); i++) {
  15.         if (sentence[i] == ' ')k++;
  16.     }
  17.     if (k == 0) {
  18.         char **words = new char *[1];
  19.         words[0] = sentence;
  20.         N = 1;
  21.         return words;
  22.     }
  23.  
  24.     char **words = new char *[k + 1];
  25.     int wordsSize = 0;
  26.     char *buffer = new char[strlen(sentence)];
  27.     int bufferSize = 0;
  28.     for (size_t i = 0; i < strlen(sentence); i++) {
  29.         if (sentence[i] == ' ') {
  30.             char *newWord = new char[bufferSize+1];
  31.             for (int j = 0; j < bufferSize; j++) {
  32.                 newWord[j] = buffer[j];
  33.             }
  34.             newWord[bufferSize] = '\0';
  35.             words[wordsSize++] = newWord;
  36.             bufferSize = 0;
  37.             continue;
  38.         }
  39.         buffer[bufferSize++] = sentence[i];
  40.     }
  41.     char *newWord = new char[bufferSize];
  42.     for (int j = 0; j < bufferSize; j++) {
  43.         newWord[j] = buffer[j];
  44.     }
  45.     newWord[bufferSize] = '\0';
  46.     words[wordsSize++] = newWord;
  47.     delete[] buffer;
  48.     N = wordsSize;
  49.     return words;
  50. }
  51.  
  52. char *reverseSentence(char *sentence) {
  53.     int N;
  54.     char **words = split(sentence, N);
  55.     for (int i = 0; i < N; i++) {
  56.         reverse(words[i]);
  57.     }
  58.     char *result = new char[strlen(sentence)];
  59.     for (int i = 0; i < strlen(sentence); i++) {
  60.         result[i] = '\0';
  61.     }
  62.     result = strcat(result, words[0]);
  63.     for (int i = 1; i < N; i++) {
  64.         result = strcat(result, " ");
  65.         result = strcat(result, words[i]);
  66.     }
  67.     return result;
  68. }
  69.  
  70. int main() {
  71.     char *sentence = new char[80];
  72.     gets(sentence);
  73.     char *reversedSentence = reverseSentence(sentence);
  74.     cout << reversedSentence << endl;
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement