Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- char* reverseStringByWords(const char* str, char delim);
- int main() {
- char str[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor";
- char* reversed = reverseStringByWords(str, ' ');
- std::cout << str << std::endl << reversed << std::endl;
- delete[] reversed;
- }
- void copyWord(const char* begin, const char* end, char* dest);
- char* reverseStringByWords(const char* str, char delim) {
- size_t size = strlen(str);
- if (size == 0) return nullptr;
- char* result = new char[size + 1]; // +1 для \0
- const char* srcPtr = str + size;
- const char* wordEnd = srcPtr;
- char* dest = result;
- srcPtr--; // пропускаем \0
- while (srcPtr != str) { // Идем по строке в обратном направлении пока не дойдем до начала
- if (*srcPtr == delim) { // Если нашли разделитель (пробел)
- copyWord(srcPtr + 1, wordEnd, dest); // Копируем слово в новую строку
- dest += wordEnd - srcPtr - 1; // Переходим в конец слова в копии строки
- *dest++ = *srcPtr; // Копируем сам разделитель
- wordEnd = srcPtr;
- }
- srcPtr--; // Переходим к предыдущему символу
- }
- copyWord(srcPtr, wordEnd, dest); // Копируем первое слово
- dest += wordEnd - srcPtr;
- *dest++ = '\0'; // Добавляем терминатор в конец строки
- return result;
- }
- void copyWord(const char* begin, const char* end, char* dest) {
- while (begin != end) {
- *dest++ = *begin++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement