Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // urs_2.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string.h>
- #include <conio.h>
- #include <Windows.h>
- void in(char** &mass_f, char* &razd_f, int &num_f, int* &kol_f, int &kol_w_f, char* &str_f);
- void s_index(char** &txt_f, int &num_f, char* &razd_f, int* &index_f, int &kol_w_f, int &razm_i_f);
- void out(char** &rez_f, int new_str_r_f);
- 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);
- int n_word(char** &txt_f, char* &razd_f, int &num_f, int &kol_w_ff);
- void out_1(char** &rez_f, int new_str_r_f,char* str_f, int kol_w_f);
- int main()
- {
- setlocale(LC_ALL, ".1251");
- char **txt = (char**)malloc(sizeof(char*) * 1);
- txt[0] = (char*)malloc(sizeof(char) * 1);
- txt = NULL;
- char *razd = (char*)malloc(sizeof(char) * 81);
- int num = 0;
- int *kol = (int*)malloc(sizeof(int) * 1);
- int kol_w = 0;
- char *str = (char*)malloc(sizeof(char) * 1);
- char **rez = (char**)malloc(sizeof(char*) * 1);
- int razm_i = 0;
- int *index = (int*)malloc(sizeof(int)*1);
- int new_str_r = 0;
- int flag = 0;
- puts("Вы можете воспользоваться меню:\nНажмите 1, чтобы ввести все исходные данные\nНажмите 2, чтобы вывести введенный текст и данные\nНажмите 3, чтобы обработать исходный массив\nНажмите 4, чтобы вывести результат работы программы\nНажмите 5, чтобы закончить работу программы");
- do
- {
- puts("\nВведите номер пункта меню, которым вы бы хотели воспользоваться:");
- int c;
- scanf("%d", &c);
- getchar();
- if (!(c > 0) && !(c < 6))
- {
- c = 0;
- puts("Введен несуществующий параметр");
- }
- switch (c)
- {
- case 1:
- {
- in(txt, razd, num, kol, kol_w, str);
- puts("Пункт меню завершил работу");
- break;
- }
- case 2:
- {
- if (txt != NULL)
- {
- out_1(txt, num, str, kol_w);
- }
- }
- case 3:
- {
- if (txt != NULL)
- {
- s_index(txt, num, razd, index, kol_w, razm_i);
- obr(txt, rez, razd, num, razm_i, index, str, new_str_r);
- puts("Пункт меню завершил работу");
- break;
- }
- break;
- }
- case 4:
- {
- if (txt != NULL)
- {
- out(rez, new_str_r);
- break;
- }
- }
- case 5:
- {
- flag = 1;
- for (int i = 0; i < num; i++)
- free(txt[i]);
- free(txt);
- for (int i = 0; i < new_str_r; i++)
- {
- rez[i] = NULL;
- free(rez[i]);
- }
- free(rez);
- free(razd);
- free(str);
- free(index);
- free(kol);
- puts("Пункт меню завершил работу");
- }
- }
- } while (flag == 0);
- system("pause");
- return 0;
- }
- //**********************************************************************************************************************************************************************************************************
- //Функция ввода всех исходных данных
- void in(char** &mass_f, char* &razd_f, int &num_f, int* &kol_f, int &kol_w_f, char* &str_f)
- {
- int sr_kol = 0;
- int p_kol = 0;
- int r = 0;
- int f_3 = 1;
- puts("Введите символы-разделители");
- scanf("%s", razd_f);
- do{
- char *str = (char*)malloc(sizeof(char) * 256);
- printf("Введите строку [%d]\n", (num_f + 1));
- scanf("%s", str);
- kol_f = (int*)realloc(kol_f, sizeof(int)*(num_f + 1));
- int len = strlen(str);
- int r_len = strlen(razd_f);
- mass_f = (char**)realloc(mass_f, sizeof(char*)*(num_f + 1));
- mass_f[num_f] = NULL;
- mass_f[num_f] = (char*)realloc(mass_f[num_f], sizeof(char)*(len + 1));
- strcpy(mass_f[num_f], str);
- int f = 1;
- int r_word = 0;
- int f_2 = 0;
- for (int i = 0; i < len; i++)
- {
- for (int j = 0; j < r_len; j++)
- {
- char a = str[i], b = razd_f[j];
- if (str[i] != razd_f[j] && f == 1)
- {
- f = 1;
- }
- else
- {
- f = 0;
- }
- }
- if (f == 1)
- {
- r_word++;
- }
- f = 1;
- }
- kol_f[num_f] = r_word;
- p_kol = p_kol + len;
- if (num_f != 0)
- {
- sr_kol = (p_kol - len) / (num_f);
- }
- if (sr_kol == kol_f[num_f])
- {
- f_3 = 0;
- }
- num_f++;
- } while (f_3 == 1);
- int flag_kol = 0;
- while (flag_kol ==0)
- {
- puts("Введите количество слов: ");
- scanf("%d", &kol_w_f);
- getchar();
- if (kol_w_f < 0)
- {
- kol_w_f = 0;
- flag_kol = 0;
- puts("Введен несуществующий параметр");
- }
- else
- {
- flag_kol = 1;
- }
- }
- puts("Введите строку для вставки: ");
- int i = 0;
- while ((str_f[i] = getch()) != '\r')
- {
- i++;
- str_f = (char*)realloc(str_f, (i + 1)*sizeof(char));
- }
- str_f[i] = '\0';
- }
- //**********************************************************************************************************************************************************************************************************
- //Функция, которая помогает определить индекс нужных нам строк
- void s_index(char** &txt_f, int &num_f, char* &razd_f, int* &index_f, int &kol_w_f, int &razm_i_f)
- {
- index_f = NULL;
- int word_f = 0;
- for (int i = 0; i < num_f; i++)
- {
- int flag = 0;
- word_f = n_word(txt_f, razd_f, i, kol_w_f);
- if (word_f != 0)
- {
- index_f = (int*)realloc(index_f, sizeof(int)*(razm_i_f + 1));
- index_f[razm_i_f] = word_f;
- razm_i_f++;
- }
- }
- }
- //**********************************************************************************************************************************************************************************************************
- //Функция, которая обрабатывает массив и записывает его в результирующий.
- 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)
- {
- int len_str = strlen(str_f);
- int len;
- int r_len = strlen(razd_f);
- int k_num = 0;
- int new_razm = 0;
- rez_f = NULL;
- char *help;
- int new_len;
- int number = 0;
- int numb = 0;
- int flag_3 = 0;
- for (int i = 0; i < num_f; i++)
- {
- len = strlen(txt_f[i]);
- rez_f = (char**)realloc(rez_f, sizeof(char*)*(i + 1));
- rez_f[i] = NULL;
- for (int j = 0; j < razm_i_f && flag_3 == 0; j++)
- {
- if (i == index_f[j])
- {
- flag_3 = 1;
- numb = j;
- }
- else
- {
- flag_3 = 0;
- }
- }
- if (flag_3 == 1)
- {
- rez_f[i] = NULL;
- rez_f[i] = (char*)realloc(rez_f[i], sizeof(char)*len_str);
- strcpy(rez_f[i], str_f);
- new_str_r_f++;
- i++;
- rez_f = (char**)realloc(rez_f, sizeof(char*)*(i + 1));
- rez_f[i] = NULL;
- rez_f[i] = (char*)realloc(rez_f[i], sizeof(char)*len);
- strcpy(rez_f[i], txt_f[i - 1]);
- }
- else
- {
- int flag = 1;
- int kol_w_f = 0;
- int r_len = strlen(razd_f);
- int len = strlen(txt_f[i]);
- for (int k = 0; k < len; k++)
- {
- int flag_2 = 0;
- for (int j = 0; !flag_2 && j < r_len; j++)
- {
- flag_2 = (txt_f[i][k] == razd_f[j]);
- }
- if (flag_2 && !flag)
- {
- kol_w_f++;
- }
- flag = flag_2;
- if (kol_w_f == 1)
- {
- number = (k);
- k = len;
- }
- }
- new_len = len - number;
- help = (char*)malloc(sizeof(char)*(new_len + 1));
- rez_f[i] = (char*)realloc(rez_f[i], sizeof(char)*(new_len + 1));
- for (int j = 0, k = number; j < new_len && k < len; j++, k++)
- {
- help[j] = txt_f[i][k];
- help[j + 1] = '\0';
- }
- strcpy(rez_f[i], help);
- }
- }
- new_str_r_f++;
- }
- //**********************************************************************************************************************************************************************************************************
- //Функция вывода результирующего массива.
- void out(char** &rez_f, int new_str_r_f)
- {
- for (int i = 0; i < new_str_r_f; i++)
- {
- printf("%s\n", rez_f[i]);
- }
- }
- void out_1(char** &rez_f, int new_str_r_f, char* str_f, int kol_w_f)
- {
- puts("Введенный текст:");
- for (int i = 0; i < new_str_r_f; i++)
- {
- printf("%s\n", rez_f[i]);
- }
- puts("Введенная строка:");
- printf("%s\n", str_f);
- puts("Введенное количество слов:");
- printf("%d\n", kol_w_f);
- }
- //Подсчитывает кол-во слов в строке.
- int n_word(char** &txt_f, char* &razd_f, int &num_f, int &kol_w_ff)
- {
- int k_i = 0;
- int flag = 1;
- int flag_3 = 1;
- int kol_w_f = 0;
- int r_len = strlen(razd_f);
- int len = strlen(txt_f[num_f]);
- for (int k = 0; k < len; k++)
- {
- int flag_2 = 0;
- for (int j = 0; !flag_2 && j < r_len; j++)
- {
- flag_2 = (txt_f[num_f][k] == razd_f[j]);
- }
- if (flag_2 && !flag)
- {
- kol_w_f++;
- }
- flag = flag_2;
- for (int q = 0; q < r_len && (k == len - 1); q++)
- {
- if (txt_f[num_f][k] != razd_f[q] && flag_3 == 1)
- {
- flag_3 = 1;
- }
- else
- {
- flag_3 = 0;
- }
- }
- if (flag_3 == 1 && k == len - 1)
- {
- kol_w_f++;
- flag_3 = 0;
- }
- if (kol_w_f == kol_w_ff)
- {
- k_i = num_f;
- }
- }
- return k_i;
- }
Advertisement
Add Comment
Please, Sign In to add comment