Преобразовать текст, поменяв местами максимальное и минимальное предложения - C (СИ) (78798)
Формулировка задачи:
Всем привет!
Уважаемые господа! Кому не сложно посмотрите это задание:
Дан текст. Преобразовать его поменяв местами максимальное и минимальное предложения. (Предложения начинаются и заканчиваются на одной строке).
Есть наброски программы(прога не работает должным образом):
#include <stdio.h> #include <alloc.h> #include <string.h> #include <conio.h> void print(char **S) { int i = 0; printf("********************************\n"); while (*(S+i)) { puts(*(S+i)); i++; } } void doText(char **S) { int min=10000, max=0, len=0,i; char *p,*cp,*cx,*cv; printf("Please, enter text\n"); for(i=0;i<8;i++) { *(S+i) = (char*)malloc(81); *(S+i) = gets(*(S+i)); cp = strtok(*(S+i),"."); len=strlen(cp); if ( len < min ) { min = len; cx=cp; } if ( len > max ) { max = len; cv=cp; } cp=strtok(NULL,"."); } p=cx; cx=cv; cv=p; } } void main() { clrscr(); char ** S= (char**)malloc(30*sizeof(char*)); doText(S); print(S); getch(); }
Решение задачи: «Преобразовать текст, поменяв местами максимальное и минимальное предложения»
textual
Листинг программы
#include <stdio.h> #include <string.h> void print(char **S){ int i = 0; printf("********************************\n"); while (*(S+i)){ puts(*(S+i)); i++; } } void doText(char **S){ int min=10000, max=0, len=0,i; char *p,*cp,*cx,*cv; printf("Please, enter text\n"); for(i=0; i<4; i++){ *(S+i) = (char*)malloc(81); *(S+i) = gets(*(S+i)); cp = strtok(*(S+i),"."); len=strlen(cp); if ( len < min ){ min = len; cx=cp; } if ( len > max ){ max = len; cv=cp; } /*cp=strtok(NULL,".");*/ } i=0; while(*(S+i)){ if(*(S+i)==cx){ *(S+i)=cv; } else if(*(S+i)==cv){ *(S+i)=cx; } ++i; } } int main(){ char ** S= (char**)malloc(30*sizeof(char*)); memset(S, 0, 30*sizeof(char*)); doText(S); print(S); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяются две функции: print и doText
- В функции print происходит вывод текста на экран через функцию printf и затем выводится знак
*
в количестве 10000 с помощью функции puts - В функции doText происходит следующее: a. Инициализируются переменные min, max, len, i, p, cp, cx, cv, S b. Пользователю предлагается ввести текст, который будет храниться в массиве S c. В цикле происходит разбиение строки на токены по точке с помощью функции strtok d. Если длина токена меньше min, то обновляется min и сохраняется токен в cx e. Если длина токена больше max, то обновляется max и сохраняется токен в cv f. После окончания цикла происходит замена минимального и максимального предложений в массиве S на соответствующие предложения g. В функции main создается массив S, который заполняется нулями h. Функция doText вызывается для изменения текста i. Результат выводится на экран с помощью функции print
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д