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

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

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

Помогите пожалуйста решить такую задачу: Преобразовать строку, изменив порядок следования слов в строке на обратный, накидал код на паскале, теперь не знаю как на Си реализовать подобное.
function convert(const s: string): string;
var
  i, j, k: integer;
  res: string;
begin
  i := length(s);
  res := '';
  while (i > 0) do 
  begin
    j := i;
    while (i > 0) and (s[i] <> ' ') do dec(i);
    for k := i + 1 to j do
      res := res + s[k];
    res := res + ' ';
    dec(i);
  end;
  convert := res;
end;
 
var
  s: string;
 
begin
  readln(s);
  writeln(convert(s));
end.

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
void rev_cat(char * in, char * out, const char * delim) {
    if ( in = strtok(in, delim) ) {
        rev_cat(NULL, out, delim);
        strcat(out, in);
        strcat(out, " ");
    }
}
 
char * words_reverse(char * str, const char * delim) {
    char tmp[strlen(str) + 2];
    
    *tmp = '\0';
    rev_cat(str, tmp, delim);
    tmp[sizeof(tmp) - 2] = '\0';
    
    return strcpy(str, tmp);
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        printf("Result: %s\n", words_reverse(buf, DELIM));
    
    return 0;
}

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

В этом коде представлен алгоритм обратного разделения строки (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
Похожие ответы