Преобразовать текст, поменяв местами максимальное и минимальное предложения - 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