ReverseWords - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. Нужна помощь с локигой. Нужно написать функцию reversWords(char *str) которая принимает предложение, например Hi, how are you? и возвращает you? are how Hi, . подскажите как это сделать оптимально. Спасибо.

Решение задачи: «ReverseWords»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char* reversWords(char *str) {
    size_t len = strlen(str);
    char* p = str + len - 1;
    char* r, * n = malloc(sizeof(char) * len + 1);
    r = n;
 
    while (len) {
        len = 0;
        for (; (str <= p) && *p == ' '; --p, ++len) { ; }
 
        for (; (str <= p) && *p != ' '; --p, ++len) { ; }
 
        if (len) {
            strncpy(r, p + 1, len);
            r += len;
        }
    }
    *r = 0;
 
    strcpy(str, n);
    free(n);
 
    return str;
}
 
int main() {
    char text[] = "Hi, how are you? ";
 
    printf("%s\n", reversWords(text));
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с памятью и строками
  2. Функция reversWords принимает на вход указатель на строку
  3. Определяем длину строки с помощью функции strlen и сохраняем ее в переменную len
  4. Устанавливаем значение указателя p равным str + len - 1, т.е. последний символ в строке
  5. Выделяем память под новую строку с помощью функции malloc, получаем указатель на выделенную память и сохраняем его в переменной n
  6. Устанавливаем значение указателя r равным n
  7. В цикле while выполняем следующие действия: а) Устанавливаем значение len равным 0 б) В цикле for перемещаемся по строке от str до p и проверяем, является ли текущий символ пробелом. Если да, то уменьшаем значение p на 1 и увеличиваем len на 1. в) В цикле for перемещаемся по строке от str до p и проверяем, является ли текущий символ пробелом или знаком препинания. Если нет, то уменьшаем значение p на 1 и увеличиваем len на 1. г) Если значение len не равно 0, то копируем символы из подстроки p+1 длиной len в новую строку, начиная с r. д) Увеличиваем значение r на len
  8. После завершения цикла while устанавливаем значение r равным 0
  9. Копируем новую строку в исходную строку с помощью функции strcpy
  10. Освобождаем память, выделенную под новую строку, с помощью функции free
  11. Возвращаем исходную строку
  12. В функции main создаем строку Hi, how are you?
  13. Вызываем функцию reversWords, передавая ей в качестве аргумента строку text
  14. Выводим результат работы функции на экран с помощью функции printf
  15. Завершаем работу программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5