Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая работа

.CPP
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
9.12 Кб
Скачать
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>

    //Їа®в®вЁЇл ЁбЇ®«м§гҐ¬ле дг­ЄжЁ©

    //дг­ЄжЁЁ ¤«п а Ў®вл б® бва®Є ¬Ё
      char* get_word(char*, char*); //Ї®«г祭ЁҐ б«®ў  Ё§ бва®ЄЁ
      int count_str(char*, const char*);  //Ї®¤бзсв ®¤Ё­ Є®ўле б«®ў

///////////////////////////////////////////////////////////////////////////////
      void strdel(char*, char*, int); //г¤ «Ґ­ЁҐ бЁ¬ў®«®ў Ё§ бва®ЄЁ
      void strins(char*, const char*, char*); //ўбв ўЄ  н«Ґ¬Ґ­в®ў ў бва®Єг
      void sortstr(char *); //б®авЁа®ўЄ  бва®ЄЁ бЁ¬ў®«®ў Ї® ў®§а бв ­Ёо
      void rebuildstr(char *); //ЇҐаҐбва®©Є  Ї®ап¤Є  Ј« б­ле ў б«®ў е бва®ЄЁ
///////////////////////////////////////////////////////////////////////////////

      void replace_word(char*, char*); //§ ¬Ґ­  ®¤­®Ј® б«®ў  ¤агЈЁ¬
      int read_str(char **); //бзЁв뢥­ЁҐ бва®Є
      void free_str(char **, int); //®зЁбвЄ  Ї ¬пвЁ ®в бва®Є

void main (void)
  {
      char *t[22], //гЄ § вҐ«Ё ­  бва®ЄЁ
     ss[81], //бва®Є  ¤«п Ї®ЁбЄ 
     sr[81], //Ё ­  Є®в®аго ¬Ґ­пҐ¬
     ch;
      int k,       //Є®«ЁзҐбвў® бва®Є ўўҐ¤с­­ле ў Ї ¬пвм (­Ґ Ў®«ҐҐ 22)
    ks,      //ЁбЄ®¬®Ґ Є®«-ў® Ї®ўв®аҐ­Ё©
    i,kt;
      do //®б­®ў­®© жЁЄ«
      {
  clrscr();
  printf("************* ђ Ў®в  б® бва®Є ¬Ё ***************");
    //ўў®¤Ё¬ ¬ ббЁў бва®Є Ё ®бв «м­лҐ Ёб室­лҐ ¤ ­­лҐ
  k=read_str(t);
/*  printf("\n‚ўҐ¤ЁвҐ ЁбЄ®¬®Ґ б«®ў® ");
  gets(ss);
/*  printf("\n‚ўҐ¤ЁвҐ Є®«-ў® Ї®ўв®аҐ­Ё© ЁбЄ®¬®Ј® б«®ў  ");
  scanf("%d", &ks);
  printf("\n‚ўҐ¤ЁвҐ б«®ў®-§ ¬Ґ­г ");
  fflush(stdin);
  gets(sr);
*/    //ўлў®¤Ё¬ ўўҐ¤с­­лҐ ¤ ­­лҐ
  clrscr();
  puts("\n‚ўҐ¤с­­л© ⥪бв: ");
  for(i=0; i<k; i++)
    puts(t[i]);
  printf("\n\n");
/*  printf("\n€бЄ®¬®Ґ б«®ў®: %s \n", ss);
  printf("‘«®ў®-§ ¬Ґ­ : %s \n", sr);
  printf("Љ®«ЁзҐбвў® Ї®ўв®аҐ­Ё© ЁЄ®¬®Ј® б«®ў  ў бва®ЄҐ : %d \n", ks);

  for(i=0; i<k; i++)
    {
      kt=count_str(t[i],ss);
      printf("\nЏ®ўв®аҐ­Ё© ЁбЄ®¬®Ј® б«®ў  %d",kt );
      replace_word(t[i],"fuck ");
    }
*/
  for (i=0; i<k; i++)
    rebuildstr(t[i]);
  puts("\n\n");
  puts("\n‚ўҐ¤с­­л© ⥪бв: ");
  for(i=0; i<k; i++)
    puts(t[i]);
  printf("\n\n");

    //®зЁй Ґ¬ бв ал© вҐЄбв
  free_str(t,k);
  printf("\n„«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ «оЎго Є« ўЁиг\n"
      "„«п ўл室  ­ ¦¬ЁвҐ <ESC>");
  fflush(stdin);
  ch=getch();
      }
      while (ch!=27); //Є®­Ґж ®б­®ў­®Ј® жЁЄ« 
  }

//----------------------------------------
//дг­ЄжЁп ўл¤Ґ«пҐв Ё§ бва®ЄЁ
//б«®ў® Ё ў®§ўа й Ґв ҐЈ®, Ґб«Ё бва®Є  ­Ґ Є®­зЁ« бм
//ў®§ўа й Ґвбп гЄ § вҐ«м ­  бЁ¬ў®«, б«Ґ¤гойЁ© §  б«®ў®¬
char* get_word(char *st, char *w)
  {
    char *pst;
    int l=0;

    pst=st;
    while ( (*pst == ' ')||(*pst == '.')||(*pst == ',')||(*pst == ';')||
        (*pst == '!')||(*pst == '?') )
  pst++;
    if (*pst)
      {
  while ((*pst)&&(*pst != ' ')&&(*pst != '.')&&(*pst != ',')&&(*pst != ';')&&
        (*pst != '!')&&(*pst != '?'))
    {
      l++;
      pst++;
    }
  strncpy(w, pst-l, l);
  w[l]='\0';
      }
    else
      w[0]='\0';
    if (!*pst)
      return NULL;
    return pst;
  }

//----------------------------------------
//дг­ЄжЁп Ї®¤бзЁвлў Ґв Є®«-ў® Ї®ўв®аҐ­Ё© ЁбЄ®¬®Ј® б«®ў  ў бва®ЄҐ
int count_str(char* st, const char* wd)
  {
    char *t3, *t2;
    int  c=0;
    t2=st;
    t3=(char *) malloc(sizeof(char)*81);
    do
    {
      t2=get_word(t2, t3);
      if (!strcmp(t3, wd))
    c++;
    } while (t2!=NULL);
    free(t3);
    return c;
  }

//----------------------------------------
//dest_str - бва®Є  ў Є®в®аго ўбв ў«пҐ¬
//src_str - нв® ¬л ўбв ў«пҐ¬
//pt - ¬Ґбв® ў Є®в®а®Ґ ¬л ўбв ў«пҐ¬
void strins(char* dest_str, const char* src_str, char* pt)
  {
     char *st3, *st2;
     int l=0;

     //­ е®¤Ё¬ а ббв®п­ЁҐ ®в ­ з «  бва®ЄЁ ¤® ¬Ґбв  ўбв ўЄЁ
     st2=pt;
     while (dest_str!=st2)
       {
   l++;
   st2--;
       }
     st3=(char *) malloc(sizeof(char)*81);
     //Є®ЇЁа㥬 Ёб室­го бва®Єг
     //®ЎаҐ§ Ґ¬ бва®Єг ¤® бЁ¬ў®«  ­  Є®в®ал© гЄ §л Ґв, pt
     strcpy(st3, dest_str);
     st3[l]='\0';
     //¤®Ў ў«пҐ¬ зв® е®вҐ«Ё, § вҐ¬ Їа®¤®«¦Ґ­ЁҐ бв а®© бва®ЄЁ
     strcat(st3, src_str);
     strcat(st3, pt);
     //ў®§ўа й Ґ¬ १г«мв в
     strcpy(dest_str, st3);
     free(st3);
  }

//----------------------------------------
//dest_str - бва®Є , Є®в®аго ०Ґ¬
//pt - гЄ § вҐ«м ­  бЁ¬ў®«, б Є®в®а®Ј® ०Ґ¬
//l - Є®«ЁзҐбвў® ўл१ Ґ¬ле бЁ¬ў®«®ў
void strdel(char* dest_str, char* pt, int l)
  {
     char *st3, *st2;
     int i=0;

     //­ е®¤Ё¬ а ббв®п­ЁҐ ®в ­ з «  бва®ЄЁ ¤® г¤ «пҐ¬®© з бвЁ
     st2=pt;
     while (dest_str!=st2)
       {
   i++;
   st2--;
       }
     st3=(char *) malloc(sizeof(char)*81);
     //Є®ЇЁа㥬 Ёб室­го бва®Єг
     //®ЎаҐ§ Ґ¬ бва®Єг ¤® бЁ¬ў®«  ­  Є®в®ал© гЄ §л Ґв, pt
     strcpy(st3, dest_str);
     st3[i]='\0';
     //ᮥ¤Ё­пҐ¬ бва®Єг б Їа®¤®«¦Ґ­ЁҐ¬ Ї®б«Ґ ўл१ ­­ле бЁ¬ў®«®ў
     st2=pt+l;
     strcat(st3, st2);
     //ў®§ўа й Ґ¬ १ ­­го бва®Єг
     strcpy(dest_str, st3);
     free(st3);
  }

//---------------------------------------
//st бва®Є  ў Є®в®а®© б®авЁа㥬 Ј« б­лҐ
void sortstr(char *st)
  {
    char *t3, *t2, *t1, m, t;
    int ci=0, i, im, j;

    t3=(char *) malloc(sizeof(char)*81); //ўл¤Ґ«пҐ¬ Ї ¬пвм ¤«п ўаҐ¬Ґ­­®© ЇҐаҐ¬Ґ­­®©
    t2=st;
    t1=t3;
    //ᮧ¤ с¬ ¬ ббЁў Ј« б­ле ЎгЄў
    while (*t2)
      {
      // ҐЁ®глноп
      //!!!!!!!„®Ў ўЁвм § Ј« ў­лҐ ЎгЄўл!!!!!!!!!!!!!
  if ((*t2 == ' ')||(*t2 == 'Ґ')||(*t2 == 'Ё')||
        (*t2 == '®')||(*t2 == 'г')||(*t2 == 'л')||(*t2 == 'н')||
        (*t2 == 'о')||(*t2 == 'п'))
  {
    *t1=*t2;
    t1++;
    ci++;
  }
  t2++;
      }
    //¬ ббЁў бЁ¬ў®«®ў t3 еа ­Ёв ўбҐ Ј« б­лҐ ЎгЄўл б«®ў 
    //б®авЁа®ўЄ  ¬Ґв®¤®¬ ЇҐаҐбв ­®ўЄЁ
      for (i=ci-1; i>=1; i--)
    //Ї®Є  Ґбвм е®вп Ўл ¤ў  ­Ґ®вб®авЁа®ў ­­ле н«Ґ¬Ґ­в 
  {
    //­ е®¤Ё¬ ­ ЁЎ®«миЁ© н«Ґ¬Ґ­в
    im=0;
    m=t3[0];
    for (j=1;j<=i;j++)
      if (m<t3[j])
        {
    m=t3[j];
    im=j;
        }
    //¬Ґ­пҐ¬ ¬Ґбв ­Ё б Ї®б«Ґ¤­Ё¬ ­Ґ®вб®авЁа®ў ­­л¬ н«Ґ¬Ґ­в®¬
    t=t3[i];
    t3[i]=t3[im];
    t3[im]=t;
  }
    t2=st;
    //ўЇЁблў Ґ¬ Ј« б­лҐ Ї® ­®ў®¬г Ї®ап¤Єг
    ci=0;
    while (*t2)
      {
      // ҐЁ®глноп
      //!!!!!!!!!!!!!!„®Ў ўЁвм § Ј« ў­лҐ ЎгЄўл!!!!!!!!!
  if ((*t2 == ' ')||(*t2 == 'Ґ')||(*t2 == 'Ё')||
        (*t2 == '®')||(*t2 == 'г')||(*t2 == 'л')||(*t2 == 'н')||
        (*t2 == 'о')||(*t2 == 'п'))
  {
    *t2=t3[ci];
    ci++;
  }
  t2++;
      }
    free(t3);
    return;
  }

//---------------------------------------
//st ЇҐаҐбва Ёў Ґ¬ п бва®Є 
void rebuildstr(char *st)
  {
    char *t3, *t2, *t1;

    t3=(char *) malloc(sizeof(char)*81); //ўл¤Ґ«пҐ¬ Ї ¬пвм ¤«п ўаҐ¬Ґ­­®© ЇҐаҐ¬Ґ­­®©
    t2=st;
    do
    //Ї®Є  ў бва®ЄҐ Ґбвм б«®ў 
    {
      t1=t2;
      //Їлв Ґ¬бп Ї®«гзЁвм гЄ § вҐ«м ­  ЇҐаўл© бЁ¬ў®« ®зҐаҐ¤­®Ј® б«®ў 
      while ( (* t1== ' ')||(*t1 == '.')||(*t1 == ',')||(*t1 == ';')||
        (*t1 == '!')||(*t1 == '?') )
  t1++;
      t2=get_word(t2, t3); //ЎҐас¬ ®зҐаҐ¤®Ґ б«®ў®
      if (*t3)
      //Ґб«Ё Ї®«гзЁ«Ё б«®ў®
      {
   //б®авЁа®гҐ¬ Ј« б­лҐ ў б«®ўҐ
   sortstr(t3);
   //ўбв ў«пҐ¬ ­  ¬Ґбв® бв а®Ј® б«®ў  ­®ў®Ґ
   strdel(st,t1,strlen(t3));
   strins(st,t3,t1);
      }
    } while (t2!=NULL);
    //®бў®Ў®¦¤ Ґ¬ Ї ¬пвм
    free(t3);
    return;
  }


//----------------------------------------
void replace_word(char *st, char *wd)
  {
    char *t3, *t2, *t1;
    int l=0;

    t3=(char *) malloc(sizeof(char)*81);
    t2=get_word(st, t3);
    t1=st;
    while ( (* t1== ' ')||(*t1 == '.')||(*t1 == ',')||(*t1 == ';')||
        (*t1 == '!')||(*t1 == '?') )
      {
  t1++;
  l++;
      }
    if(*t1)
      {
  strcpy(t3,st);
  t3[l]='\0';
  strcat(t3, wd);
  strcat(t3, t2);
  strcpy(st, t3);
      }
    free(t3);
    return;
  }

//----------------------------------------
//”г­ЄжЁп ЇаҐ¤« Ј Ґв Ї®бва®з­® ўўҐб⨠⥪бв ў ¬ ббЁў гЄ § вҐ«Ґ©
//­  бва®ЄЁ a, ў®§ўа й Ґв Є®«-ў® ўўҐ¤с­­ле бва®Є
//ўў®¤ бва®Є ®Є ­зЁў Ґвбп ўў®¤®¬ Їгбв®© бва®ЄЁ Ё«Ё ўў®¤®¬ 22-е бва®Є
int read_str(char **a)
  {
     int j, count;
     char b[81];

     puts("\n‚ўҐ¤ЁвҐ, Ї®¦ «г©бв , ⥪бв");
     puts("‚ў®¤ § ўҐаи Ґвбп Їгбв®© бва®Є®© Ё«Ё ўўҐ¤Ґ­ЁҐ¬ ⥪бв  Ё§ 22-е бва®Є");
     for (j=0,count=0; j<22; j++)
       {
   do
   {
     puts("‚ўҐ¤ЁвҐ бва®Єг: ");
     gets(b);
     if (strlen(b)==0&&count==0)
       printf("\n‚ўҐ¤ЁвҐ е®впЎл ®¤­г бва®Єг!\n");
   }
   while ((strlen(b) == 0)&&(count==0));
   if (strlen(b)==0)
     break;
   if ((a[j]=(char *) malloc((strlen(b)+1)*sizeof(char))) == NULL)
     {
       printf("\nЌҐ¤®бв в®з­® Ї ¬пвЁ ¤«п ўў®¤  бва®ЄЁ");
       exit(1);
     }
   strcpy(a[j], b);
   count++;
       }
     return count;
  }

//-------------------------------------

//дг­ЄжЁп ®бў®Ў®¦¤Ґ­Ёп Ї ¬пвЁ, ўл¤Ґ«Ґ­­®© Ї®¤ ⥪бв
//Ї а ¬Ґвал: ¬ ббЁў гЄ § вҐ«Ґ©, Є®«-ў® бва®Є
void free_str(char **a, int count)
  {
    int j;

    for (j=0; j<count; j++)
      free(a[j]);
  }