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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью и строками
- Функция reversWords принимает на вход указатель на строку
- Определяем длину строки с помощью функции strlen и сохраняем ее в переменную len
- Устанавливаем значение указателя p равным str + len - 1, т.е. последний символ в строке
- Выделяем память под новую строку с помощью функции malloc, получаем указатель на выделенную память и сохраняем его в переменной n
- Устанавливаем значение указателя r равным n
- В цикле 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
- После завершения цикла while устанавливаем значение r равным 0
- Копируем новую строку в исходную строку с помощью функции strcpy
- Освобождаем память, выделенную под новую строку, с помощью функции free
- Возвращаем исходную строку
- В функции main создаем строку
Hi, how are you?
- Вызываем функцию reversWords, передавая ей в качестве аргумента строку text
- Выводим результат работы функции на экран с помощью функции printf
- Завершаем работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д