Ввести строку, вывести пословно на экран, но слова в обратном порядке - C (СИ) (75067)
Формулировка задачи:
Ввести строку, вывести пословно на экран, но слова в обратном порядке.
Решение задачи: «Ввести строку, вывести пословно на экран, но слова в обратном порядке»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
void print_reversed_words(char * str, const char * delim) {
if ( str = strtok(str, delim) ) {
print_reversed_words(NULL, delim);
printf("%s ", str);
}
}
typedef char string_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
#define DELIM " \t\n"
int main(void) {
string_t str;
while ( printf("\nString: ") && get_string(str) && printf("Reversed: ") )
print_reversed_words(str, DELIM);
return 0;
}
Объяснение кода листинга программы
В этом коде реализована функция print_reversed_words, которая принимает два аргумента: строку str и строку-разделитель delim. Эта функция переворачивает порядок слов в строке и выводит их на экран через разделитель.
Список действий, которые выполняются в коде:
- Предупреждение: в коде есть несколько потенциальных проблем, которые могут привести к неопределенному поведению или сбоям.
- Код использует функцию
strtokдля разделения строки на слова. Функцияstrtokмодифицирует входную строку, поэтому ее следует использовать осторожно. - Функция
print_reversed_wordsвызывается рекурсивно, пока не будет найдено еще одно слово. - Если слово найдено, функция
print_reversed_wordsвызывает себя для оставшейся части строки и выводит текущее слово в обратном порядке. - Если строка пуста, вызывается функция
printfдля вывода строки-разделителя и завершения работы функции. - В функции
mainсоздается массив типаstring_tдля хранения введенной строки. - Пользователю предлагается ввести строку.
- Если строка успешно введена и разделена на слова, вызывается функция
print_reversed_wordsдля вывода перевернутых слов. - Цикл продолжается до тех пор, пока пользователь не введет строку.
- В конце программы возвращается 0, указывая на успешное завершение работы.