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

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяются две функции: print и doText
  3. В функции print происходит вывод текста на экран через функцию printf и затем выводится знак * в количестве 10000 с помощью функции puts
  4. В функции 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5
Похожие ответы