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