Преобразовать строку, изменив порядок следования слов в строке на обратный - 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
. Таким образом, этот код преобразует строку, изменяя порядок следования слов в строке на обратный.
- Если входная строка не равна
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д