Silent1Snow

Untitled

Dec 22nd, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.29 KB | None | 0 0
  1. // urs_2.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string.h>
  7. #include <conio.h>
  8. #include <Windows.h>
  9.  
  10. void in(char** &mass_f, char* &razd_f, int &num_f, int* &kol_f, int &kol_w_f, char* &str_f);
  11. void s_index(char** &txt_f, int &num_f, char* &razd_f, int* &index_f, int &kol_w_f, int &razm_i_f);
  12. void out(char** &rez_f, int new_str_r_f);
  13. void obr(char** &txt_f, char** &rez_f, char* &razd_f, int &num_f, int &razm_i_f, int* &index_f, char* &str_f, int &new_str_r_f);
  14. int n_word(char** &txt_f, char* &razd_f, int &num_f, int &kol_w_ff);
  15. void out_1(char** &rez_f, int new_str_r_f,char* str_f, int kol_w_f);
  16.  
  17.  
  18. int main()
  19. {
  20.     setlocale(LC_ALL, ".1251");
  21.     char **txt = (char**)malloc(sizeof(char*) * 1);
  22.     txt[0] = (char*)malloc(sizeof(char) * 1);
  23.     txt = NULL;
  24.     char *razd = (char*)malloc(sizeof(char) * 81);
  25.     int num = 0;
  26.     int *kol = (int*)malloc(sizeof(int) * 1);
  27.     int kol_w = 0;
  28.     char *str = (char*)malloc(sizeof(char) * 1);
  29.     char **rez = (char**)malloc(sizeof(char*) * 1);
  30.     int razm_i = 0;
  31.     int *index = (int*)malloc(sizeof(int)*1);
  32.     int new_str_r = 0;
  33.     int flag = 0;
  34.     puts("Вы можете воспользоваться меню:\nНажмите 1, чтобы ввести все исходные данные\nНажмите 2, чтобы вывести введенный текст и данные\nНажмите 3, чтобы обработать исходный массив\nНажмите 4, чтобы вывести результат работы программы\nНажмите 5, чтобы закончить работу программы");
  35.     do
  36.     {
  37.         puts("\nВведите номер пункта меню, которым вы бы хотели воспользоваться:");
  38.         int c;
  39.         scanf("%d", &c);
  40.         getchar();
  41.         if (!(c > 0) && !(c < 6))
  42.         {
  43.             c = 0;
  44.             puts("Введен несуществующий параметр");
  45.         }
  46.         switch (c)
  47.         {
  48.         case 1:
  49.         {
  50.             in(txt, razd, num, kol, kol_w, str);
  51.             puts("Пункт меню завершил работу");
  52.             break;
  53.         }
  54.         case 2:
  55.         {
  56.             if (txt != NULL)
  57.             {
  58.                 out_1(txt, num, str, kol_w);
  59.             }
  60.         }
  61.         case 3:
  62.         {
  63.             if (txt != NULL)
  64.             {
  65.                     s_index(txt, num, razd, index, kol_w, razm_i);
  66.                     obr(txt, rez, razd, num, razm_i, index, str, new_str_r);
  67.                     puts("Пункт меню завершил работу");
  68.                     break;
  69.             }
  70.             break;
  71.         }
  72.         case 4:
  73.         {
  74.             if (txt != NULL)
  75.             {
  76.                     out(rez, new_str_r);
  77.                     break;
  78.             }
  79.         }
  80.         case 5:
  81.         {
  82.             flag = 1;
  83.             for (int i = 0; i < num; i++)
  84.                 free(txt[i]);
  85.             free(txt);
  86.             for (int i = 0; i < new_str_r; i++)
  87.             {
  88.                 rez[i] = NULL;
  89.                 free(rez[i]);
  90.             }
  91.             free(rez);
  92.             free(razd);
  93.             free(str);
  94.             free(index);
  95.             free(kol);
  96.             puts("Пункт меню завершил работу");
  97.         }
  98.         }
  99.     } while (flag == 0);
  100.     system("pause");
  101.     return 0;
  102. }
  103. //**********************************************************************************************************************************************************************************************************
  104. //Функция ввода всех исходных данных
  105. void in(char** &mass_f, char* &razd_f, int &num_f, int* &kol_f, int &kol_w_f, char* &str_f)
  106. {
  107.     int sr_kol = 0;
  108.     int p_kol = 0;
  109.     int r = 0;
  110.     int f_3 = 1;
  111.     puts("Введите символы-разделители");
  112.     scanf("%s", razd_f);
  113.     do{
  114.         char *str = (char*)malloc(sizeof(char) * 256);
  115.         printf("Введите строку [%d]\n", (num_f + 1));
  116.         scanf("%s", str);
  117.         kol_f = (int*)realloc(kol_f, sizeof(int)*(num_f + 1));
  118.         int len = strlen(str);
  119.         int r_len = strlen(razd_f);
  120.         mass_f = (char**)realloc(mass_f, sizeof(char*)*(num_f + 1));
  121.         mass_f[num_f] = NULL;
  122.         mass_f[num_f] = (char*)realloc(mass_f[num_f], sizeof(char)*(len + 1));
  123.         strcpy(mass_f[num_f], str);
  124.         int f = 1;
  125.         int r_word = 0;
  126.         int f_2 = 0;
  127.         for (int i = 0; i < len; i++)
  128.         {
  129.             for (int j = 0; j < r_len; j++)
  130.             {
  131.                 char a = str[i], b = razd_f[j];
  132.                 if (str[i] != razd_f[j] && f == 1)
  133.                 {
  134.                     f = 1;
  135.                 }
  136.                 else
  137.                 {
  138.                     f = 0;
  139.                 }
  140.             }
  141.             if (f == 1)
  142.             {
  143.                 r_word++;
  144.             }
  145.             f = 1;
  146.         }
  147.         kol_f[num_f] = r_word;
  148.         p_kol = p_kol + len;
  149.         if (num_f != 0)
  150.         {
  151.             sr_kol = (p_kol - len) / (num_f);
  152.         }
  153.         if (sr_kol == kol_f[num_f])
  154.         {
  155.             f_3 = 0;
  156.         }
  157.         num_f++;
  158.     } while (f_3 == 1);
  159.     int flag_kol = 0;
  160.     while (flag_kol ==0)
  161.     {
  162.         puts("Введите количество слов: ");
  163.         scanf("%d", &kol_w_f);
  164.         getchar();
  165.         if (kol_w_f < 0)
  166.         {
  167.             kol_w_f = 0;
  168.             flag_kol = 0;
  169.             puts("Введен несуществующий параметр");
  170.         }
  171.         else
  172.         {
  173.             flag_kol = 1;
  174.         }
  175.     }
  176.     puts("Введите строку для вставки: ");
  177.     int i = 0;
  178.     while ((str_f[i] = getch()) != '\r')
  179.     {
  180.         i++;
  181.         str_f = (char*)realloc(str_f, (i + 1)*sizeof(char));
  182.     }
  183.     str_f[i] = '\0';
  184. }
  185. //**********************************************************************************************************************************************************************************************************
  186. //Функция, которая помогает определить индекс нужных нам строк
  187. void s_index(char** &txt_f, int &num_f, char* &razd_f, int* &index_f, int &kol_w_f, int &razm_i_f)
  188. {
  189.     index_f = NULL;
  190.     int word_f = 0;
  191.     for (int i = 0; i < num_f; i++)
  192.     {
  193.         int flag = 0;
  194.         word_f = n_word(txt_f, razd_f, i, kol_w_f);
  195.         if (word_f != 0)
  196.         {
  197.             index_f = (int*)realloc(index_f, sizeof(int)*(razm_i_f + 1));
  198.             index_f[razm_i_f] = word_f;
  199.             razm_i_f++;
  200.         }
  201.     }
  202. }
  203. //**********************************************************************************************************************************************************************************************************
  204. //Функция, которая обрабатывает массив и записывает его в результирующий.
  205. void obr(char** &txt_f, char** &rez_f, char* &razd_f, int &num_f, int &razm_i_f, int* &index_f, char* &str_f, int &new_str_r_f)
  206. {
  207.     int len_str = strlen(str_f);
  208.     int len;
  209.     int r_len = strlen(razd_f);
  210.     int k_num = 0;
  211.     int new_razm = 0;
  212.     rez_f = NULL;
  213.     char *help;
  214.     int new_len;
  215.     int number = 0;
  216.     int numb = 0;
  217.     int flag_3 = 0;
  218.     for (int i = 0; i < num_f; i++)
  219.     {
  220.         len = strlen(txt_f[i]);
  221.         rez_f = (char**)realloc(rez_f, sizeof(char*)*(i + 1));
  222.         rez_f[i] = NULL;
  223.         for (int j = 0; j < razm_i_f && flag_3 == 0; j++)
  224.         {
  225.             if (i == index_f[j])
  226.             {
  227.                 flag_3 = 1;
  228.                 numb = j;
  229.             }
  230.             else
  231.             {
  232.                 flag_3 = 0;
  233.             }
  234.         }
  235.             if (flag_3 == 1)
  236.             {
  237.                 rez_f[i] = NULL;
  238.                 rez_f[i] = (char*)realloc(rez_f[i], sizeof(char)*len_str);
  239.                 strcpy(rez_f[i], str_f);
  240.                 new_str_r_f++;
  241.                 i++;
  242.                 rez_f = (char**)realloc(rez_f, sizeof(char*)*(i + 1));
  243.                 rez_f[i] = NULL;
  244.                 rez_f[i] = (char*)realloc(rez_f[i], sizeof(char)*len);
  245.                 strcpy(rez_f[i], txt_f[i - 1]);
  246.             }
  247.             else
  248.             {
  249.                 int flag = 1;
  250.                 int kol_w_f = 0;
  251.                 int r_len = strlen(razd_f);
  252.                 int len = strlen(txt_f[i]);
  253.                 for (int k = 0; k < len; k++)
  254.                 {
  255.                     int flag_2 = 0;
  256.                     for (int j = 0; !flag_2 && j < r_len; j++)
  257.                     {
  258.                         flag_2 = (txt_f[i][k] == razd_f[j]);
  259.                     }
  260.                     if (flag_2 && !flag)
  261.                     {
  262.                         kol_w_f++;
  263.                     }
  264.                     flag = flag_2;
  265.                     if (kol_w_f == 1)
  266.                     {
  267.                         number = (k);
  268.                         k = len;
  269.                     }
  270.                 }
  271.                 new_len = len - number;
  272.                 help = (char*)malloc(sizeof(char)*(new_len + 1));
  273.                 rez_f[i] = (char*)realloc(rez_f[i], sizeof(char)*(new_len + 1));
  274.                 for (int j = 0, k = number; j < new_len && k < len; j++, k++)
  275.                 {
  276.                     help[j] = txt_f[i][k];
  277.                     help[j + 1] = '\0';
  278.                 }
  279.                 strcpy(rez_f[i], help);
  280.             }
  281.         }
  282.     new_str_r_f++;
  283.     }
  284.  
  285. //**********************************************************************************************************************************************************************************************************
  286. //Функция вывода результирующего массива.
  287. void out(char** &rez_f, int new_str_r_f)
  288. {
  289.     for (int i = 0; i < new_str_r_f; i++)
  290.     {
  291.         printf("%s\n", rez_f[i]);
  292.     }
  293. }
  294.  
  295. void out_1(char** &rez_f, int new_str_r_f, char* str_f, int kol_w_f)
  296. {
  297.     puts("Введенный текст:");
  298.     for (int i = 0; i < new_str_r_f; i++)
  299.     {
  300.         printf("%s\n", rez_f[i]);
  301.     }
  302.     puts("Введенная строка:");
  303.     printf("%s\n", str_f);
  304.     puts("Введенное количество слов:");
  305.     printf("%d\n", kol_w_f);
  306. }
  307. //Подсчитывает кол-во слов в строке.
  308. int n_word(char** &txt_f, char* &razd_f, int &num_f, int &kol_w_ff)
  309. {
  310.     int k_i = 0;
  311.     int flag = 1;
  312.     int flag_3 = 1;
  313.     int kol_w_f = 0;
  314.     int r_len = strlen(razd_f);
  315.     int len = strlen(txt_f[num_f]);
  316.     for (int k = 0; k < len; k++)
  317.     {
  318.         int flag_2 = 0;
  319.         for (int j = 0; !flag_2 && j < r_len; j++)
  320.         {
  321.             flag_2 = (txt_f[num_f][k] == razd_f[j]);
  322.         }
  323.         if (flag_2 && !flag)
  324.         {
  325.             kol_w_f++;
  326.         }
  327.         flag = flag_2;
  328.         for (int q = 0; q < r_len && (k == len - 1); q++)
  329.         {
  330.             if (txt_f[num_f][k] != razd_f[q] && flag_3 == 1)
  331.             {
  332.                 flag_3 = 1;
  333.             }
  334.             else
  335.             {
  336.                 flag_3 = 0;
  337.             }
  338.         }
  339.         if (flag_3 == 1 && k == len - 1)
  340.         {
  341.             kol_w_f++;
  342.             flag_3 = 0;
  343.         }
  344.         if (kol_w_f == kol_w_ff)
  345.         {
  346.             k_i = num_f;
  347.         }
  348.     }
  349.     return k_i;
  350. }
Advertisement
Add Comment
Please, Sign In to add comment