Guest User

Untitled

a guest
May 22nd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <locale.h>
  5.  
  6.  
  7. void menu();
  8.  
  9. void text();
  10.  
  11. int main()
  12. {
  13.     setlocale(LC_CTYPE,"Russian");
  14.     int sw,w=0;
  15.         char *space,*substr,*zamstr,*forwardstr,tmp[256],**outtext,**intext;
  16.         char ***words;
  17.         int kol_words[500];
  18.         int nword,nswap,i,countswap,countstr;
  19.         int eoi=0,numword=0;
  20.                 countstr=0;
  21.     do
  22.     {
  23.  
  24.  
  25.         puts("Выберите пункт меню из предложеных далее");
  26.         menu();
  27.  
  28.         do
  29.         {
  30.             scanf("%d%*c",&sw);
  31.             switch (sw)
  32.             {
  33.                 case 1:
  34.                 {
  35.                     text();
  36.                     menu();
  37.                     break;
  38.                 }
  39.  
  40.         //------------------------------------------------------------------------
  41.  
  42.                 case 2:
  43.                 {
  44.  
  45.                     puts("Введите строку элементов-разделителей");
  46.                     fgets(tmp, 256, stdin);
  47.                     space=(char*)malloc((strlen(tmp)+1)*sizeof(char));
  48.                     strcpy(space,tmp);
  49.  
  50.  
  51.                     puts("Введите максимальное количество одинаковых слов в строке");
  52.                     scanf("%d%*c",&nword);
  53.  
  54.  
  55.                     puts("Введите слово, которое надо заменить");
  56.                     fgets(tmp, 256, stdin);
  57.                     substr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
  58.                     strcpy(substr,tmp);
  59.  
  60.  
  61.                     puts("Введите слово, на которое мы заменяем найденое слово, введенное ранее");
  62.                     fgets(tmp, 256, stdin);
  63.                     zamstr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
  64.                     strcpy(zamstr,tmp);
  65.                     if ( zamstr[strlen(&zamstr[0])-1] == '\n')
  66.                     {
  67.                         zamstr[strlen(&zamstr[0])-1]='\0';
  68.                     }
  69.  
  70.                     puts("Введите максимальное количество замен");
  71.                     scanf("%d%*c", &nswap);
  72.  
  73.                     puts("Введите строку, которую нужно вставить, при количестве замен, большем чем заданное ранее число");
  74.                     fgets(tmp, 256, stdin);
  75.                     forwardstr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
  76.                     strcpy(forwardstr,tmp);
  77.                     if ( forwardstr[strlen(&forwardstr[0])-1] == '\n')
  78.                         forwardstr[strlen(&forwardstr[0])-1] = '\0';
  79.                     w=1;
  80.                     menu();
  81.                     break;
  82.                 }
  83.  
  84.         //------------------------------------------------------------------------
  85.  
  86.                 case 3:
  87.                 {
  88.                     if (w!=1 && w!=2 && w!=3 && w!=4) // проверка
  89.                     {
  90.                            puts ("\n   Ошибка! Сначала выполните второй пункт\n   меню и введите количество столбцов...");
  91.                     break;
  92.                     }
  93.  
  94.                     words=(char***)malloc(sizeof(char**));
  95.                     intext=(char**)malloc(sizeof(char*));
  96.                     for (i=1;!eoi;i++)
  97.                     {
  98.  
  99.                         printf("Введите строку под номером %d\n",i);
  100.                         countstr++;
  101.                         tmp[0]='\0';
  102.                         fgets(tmp, 256, stdin);
  103.                         if ( tmp[strlen(&tmp[0])-1] == '\n')
  104.                             tmp[strlen(&tmp[0])-1] = '\0';
  105.                         int k=0,j=0,count=0,lenword=0;
  106.                         char *b;
  107.                         b=tmp;
  108.                         numword=0;
  109.                         words=(char ***)realloc(words, (countstr+1)*sizeof(char**));
  110.                         intext=(char**)realloc(intext, (countstr+1)*sizeof(char*));
  111.                         intext[i]=(char*)malloc((strlen(tmp)+1)*sizeof(char));
  112.                         strcat(intext[countstr],tmp);
  113.                         while (*b != '\0')
  114.                         {
  115.                             char buf[150];
  116.                             buf[0]='\0';
  117.  
  118.  
  119.                             while ( !strchr(space, *b) && *b != '\0' )
  120.                             {
  121.                                 buf[strlen(&buf[0])+1]='\0';
  122.                                 buf[strlen(&buf[0])]=*b;
  123.                                 ++b;
  124.                             }
  125.  
  126.                             words[countstr]=(char**)realloc(words[countstr],(numword+1)*sizeof(char*));
  127.                             lenword=strlen(&buf[0])+1;
  128.                             buf[strlen(&buf[0])+1]='\0';
  129.                             buf[strlen(&buf[0])]=*b;
  130.                             b++;
  131.                             numword++;
  132.                             words[countstr][numword]=(char*)malloc((lenword+1)*sizeof(char));
  133.                             strcat(words[countstr][numword],buf);
  134.  
  135.  
  136.                         }
  137.  
  138.                         count=0;
  139.  
  140.                         for (k=1;k<=numword;k++)
  141.                         {
  142.                             count=1;
  143.                             for (j=k+1;j<=numword;j++)
  144.                             {
  145.                                 if (strcmp(words[countstr][k],words[countstr][j])==0)
  146.                                     count++;
  147.                             }
  148.                             if (count>nword)
  149.                                 eoi=1;
  150.                         }
  151.                         kol_words[countstr]=numword;
  152.                     }
  153.                     w=2;
  154.                     menu();
  155.                     break;
  156.                 }
  157.  
  158.         //------------------------------------------------------------------------
  159.  
  160.                 case 4:
  161.                 {
  162.                     if (w!=2 && w!=3 && w!=4) // проверка
  163.                     {
  164.                         puts ("\n   Ошибка! Сначала выполните третий\n   пункт меню и введите первую строку...");
  165.                         break;
  166.                     }
  167.                     for (i=1;i<=countstr;i++)
  168.                     {
  169.                         puts(intext[i]);
  170.                     }
  171.                     w=3;
  172.                     menu();
  173.                     break;
  174.                 }
  175.  
  176.         //------------------------------------------------------------------------
  177.  
  178.                 case 5:
  179.                 {
  180.                     if (w!=3 && w!=4 && w!=2) // проверка
  181.                     {
  182.                         puts ("\n   Ошибка! Сначала выполните четвертый\n   пункт меню и введите строки массива...");
  183.                         break;
  184.                     }
  185.  
  186.                     outtext=(char**)malloc((countstr+1)*sizeof(char*));
  187.                     for (i=1;i<=countstr;i++)
  188.                     {
  189.                         outtext[i]=(char*)malloc(sizeof(words[i])+1);
  190.  
  191.                         countswap=0;
  192.                         int j;
  193.                         for (j=1; j<=kol_words[i];j++)
  194.                         {
  195.                             if (strstr(words[i][j],substr)!=NULL)
  196.                             {
  197.                                 free(words[i][j]);
  198.                                 words[i][j] = (char*)malloc(sizeof(zamstr)+1);
  199.                                 strcat(words[i][j], zamstr);
  200.                                 countswap++;
  201.                             }
  202.                         }
  203.                         if (countswap<nswap) strcpy(outtext[i],forwardstr);
  204.                         for (j=0; j<kol_words[i]; j++)
  205.                         {
  206.                             strcat(outtext[i], words[i][j]);
  207.                         }
  208.                     }
  209.                     w=4;
  210.                     menu();
  211.                     break;
  212.                 }
  213.  
  214.  
  215.         //------------------------------------------------------------------------
  216.  
  217.                 case 6:
  218.                 {
  219.                     if (w!=4) // проверка
  220.                     {
  221.                         puts ("\n   Ошибка! Сначала выполните пятный \n пункт меню и введите строки массива");
  222.                         break;
  223.                     }
  224.                     puts("Сформированый в результате преобразований массив");
  225.                     for (i=0;i<countstr;i++)
  226.                     {
  227.                         puts(outtext[i]);
  228.                         free(words[i]);
  229.                     }
  230.                     menu();
  231.                     break;
  232.                 }
  233.  
  234.                 case 8:
  235.                 {
  236.                     exit(0);
  237.                 }
  238.             }
  239.         }
  240.         while (sw==1 || sw==2 || sw==3 || sw==4 || sw==5 || sw==6);
  241.  
  242.  
  243.     }
  244.     while (sw==7);
  245.     return 0;
  246.  
  247.         free(words);
  248.  
  249.         free(outtext);
  250.  
  251.         free(intext);
  252.  
  253.         free(space);
  254.  
  255.         free(substr);
  256.  
  257.         free(zamstr);
  258.  
  259.         free(forwardstr);
  260. }
  261.  
  262.  
  263.  
  264.  
  265. void menu()
  266.  
  267. {
  268.  
  269.     puts("Меню:");
  270.     puts("Введите 1 чтобы увидеть текст задания");
  271.     puts("Введите 2 чтобы ввести дополнительные данные, такие как строка разделителей и т.д.");
  272.     puts("Введите 3 чтобы ввести текст");
  273.     puts("Введите 4 чтобы вывести исходный текст");
  274.     puts("Введите 5 чтобы проверить текст на искомые слова");
  275.     puts("Введите 6 чтобы вывести полученый текст");
  276.     puts("Введите 7 чтобы перезапустить программу и повторить вычисления");
  277.     puts("Введите 8 для выхода из программы");
  278. }
  279.  
  280. void text()
  281.  
  282. {
  283.  
  284.     puts("Ввести строку символов   разделителей и  массив строк текста с неизвестным количеством строк.");
  285.     puts("Признаком окончания ввода текста является ввод строки, в которой встречается больше заданного количества одинаковых слов.");
  286.     puts("В строках введенного текста заменить слова, которые заканчиваются на заданную в исходных данных подстроку символов,");
  287.     puts("на другое слово, также заданного в исходных данных.");
  288.     puts("Перед строками, количество замен в которых не превышает некоторое число, вставить заданную строку.");
  289.     puts("Вывести преобразованный текст.");
  290.  
  291. }
Add Comment
Please, Sign In to add comment