Преобразовать строку, изменив порядок следования слов в строке на обратный - C (СИ) (71258)

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

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

Помогите пожалуйста решить такую задачу: Преобразовать строку, изменив порядок следования слов в строке на обратный, накидал код на паскале, теперь не знаю как на Си реализовать подобное.
Листинг программы
  1. function convert(const s: string): string;
  2. var
  3. i, j, k: integer;
  4. res: string;
  5. begin
  6. i := length(s);
  7. res := '';
  8. while (i > 0) do
  9. begin
  10. j := i;
  11. while (i > 0) and (s[i] <> ' ') do dec(i);
  12. for k := i + 1 to j do
  13. res := res + s[k];
  14. res := res + ' ';
  15. dec(i);
  16. end;
  17. convert := res;
  18. end;
  19. var
  20. s: string;
  21. begin
  22. readln(s);
  23. writeln(convert(s));
  24. end.

Решение задачи: «Преобразовать строку, изменив порядок следования слов в строке на обратный»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void rev_cat(char * in, char * out, const char * delim) {
  5.     if ( in = strtok(in, delim) ) {
  6.         rev_cat(NULL, out, delim);
  7.         strcat(out, in);
  8.         strcat(out, " ");
  9.     }
  10. }
  11.  
  12. char * words_reverse(char * str, const char * delim) {
  13.     char tmp[strlen(str) + 2];
  14.    
  15.     *tmp = '\0';
  16.     rev_cat(str, tmp, delim);
  17.     tmp[sizeof(tmp) - 2] = '\0';
  18.    
  19.     return strcpy(str, tmp);
  20. }
  21.  
  22. #define DELIM " \t\n"
  23.  
  24. int main(void) {
  25.     char buf[BUFSIZ];
  26.    
  27.     while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
  28.         printf("Result: %s\n", words_reverse(buf, DELIM));
  29.    
  30.     return 0;
  31. }

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

В этом коде представлен алгоритм обратного разделения строки (reverse string split). Список действий:

  1. В функции main():
    • Запрашивается исходная строка с помощью функции fgets().
    • Используется функция words_reverse() для обращения порядка слов в строке.
    • Результат выводится на экран с помощью printf().
  2. В функции words_reverse():
    • Создается буфер tmp для хранения результата.
    • Строка delim инициализируется символом новой строки ('\n').
    • Строка str копируется в буфер tmp.
    • В цикле рекурсивно вызывается функция rev_cat(), пока не будет получена следующая строка, разделенная символом delim.
    • Результат добавляется в буфер tmp.
    • Добавляется символ новой строки ('\n').
    • Строка str очищается и заполняется содержимым буфера tmp.
    • Строка str возвращается.
  3. В функции rev_cat():
    • Если входная строка не равна NULL, то вызывается функция strtok() для разделения строки на слова и возврата первого слова.
    • Если первое слово не равно NULL, то функция rev_cat() вызывается рекурсивно для обработки следующего слова.
    • В строку out добавляется текущее слово, разделенное пробелом.
    • Если входная строка равна NULL, то возвращается NULL. Таким образом, этот код преобразует строку, изменяя порядок следования слов в строке на обратный.

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


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

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

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы