Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void reverse(char *&word) {
- int len = strlen(word);
- for (int i = 0; i < len / 2; i++) {
- swap(word[i], word[len - 1 - i]);
- }
- }
- char **split(char *sentence, int &N) {
- int k = 0;
- for (size_t i = 0; i < strlen(sentence); i++) {
- if (sentence[i] == ' ')k++;
- }
- if (k == 0) {
- char **words = new char *[1];
- words[0] = sentence;
- N = 1;
- return words;
- }
- char **words = new char *[k + 1];
- int wordsSize = 0;
- char *buffer = new char[strlen(sentence)];
- int bufferSize = 0;
- for (size_t i = 0; i < strlen(sentence); i++) {
- if (sentence[i] == ' ') {
- char *newWord = new char[bufferSize+1];
- for (int j = 0; j < bufferSize; j++) {
- newWord[j] = buffer[j];
- }
- newWord[bufferSize] = '\0';
- words[wordsSize++] = newWord;
- bufferSize = 0;
- continue;
- }
- buffer[bufferSize++] = sentence[i];
- }
- char *newWord = new char[bufferSize];
- for (int j = 0; j < bufferSize; j++) {
- newWord[j] = buffer[j];
- }
- newWord[bufferSize] = '\0';
- words[wordsSize++] = newWord;
- delete[] buffer;
- N = wordsSize;
- return words;
- }
- char *reverseSentence(char *sentence) {
- int N;
- char **words = split(sentence, N);
- for (int i = 0; i < N; i++) {
- reverse(words[i]);
- }
- char *result = new char[strlen(sentence)];
- for (int i = 0; i < strlen(sentence); i++) {
- result[i] = '\0';
- }
- result = strcat(result, words[0]);
- for (int i = 1; i < N; i++) {
- result = strcat(result, " ");
- result = strcat(result, words[i]);
- }
- return result;
- }
- int main() {
- char *sentence = new char[80];
- gets(sentence);
- char *reversedSentence = reverseSentence(sentence);
- cout << reversedSentence << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement