Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale.h>
- void menu();
- void text();
- int main()
- {
- setlocale(LC_CTYPE,"Russian");
- int sw,w=0;
- char *space,*substr,*zamstr,*forwardstr,tmp[256],**outtext,**intext;
- char ***words;
- int kol_words[500];
- int nword,nswap,i,countswap,countstr;
- int eoi=0,numword=0;
- countstr=0;
- do
- {
- puts("Выберите пункт меню из предложеных далее");
- menu();
- do
- {
- scanf("%d%*c",&sw);
- switch (sw)
- {
- case 1:
- {
- text();
- menu();
- break;
- }
- //------------------------------------------------------------------------
- case 2:
- {
- puts("Введите строку элементов-разделителей");
- fgets(tmp, 256, stdin);
- space=(char*)malloc((strlen(tmp)+1)*sizeof(char));
- strcpy(space,tmp);
- puts("Введите максимальное количество одинаковых слов в строке");
- scanf("%d%*c",&nword);
- puts("Введите слово, которое надо заменить");
- fgets(tmp, 256, stdin);
- substr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
- strcpy(substr,tmp);
- puts("Введите слово, на которое мы заменяем найденое слово, введенное ранее");
- fgets(tmp, 256, stdin);
- zamstr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
- strcpy(zamstr,tmp);
- if ( zamstr[strlen(&zamstr[0])-1] == '\n')
- {
- zamstr[strlen(&zamstr[0])-1]='\0';
- }
- puts("Введите максимальное количество замен");
- scanf("%d%*c", &nswap);
- puts("Введите строку, которую нужно вставить, при количестве замен, большем чем заданное ранее число");
- fgets(tmp, 256, stdin);
- forwardstr=(char*)malloc((strlen(tmp)+1)*sizeof(char));
- strcpy(forwardstr,tmp);
- if ( forwardstr[strlen(&forwardstr[0])-1] == '\n')
- forwardstr[strlen(&forwardstr[0])-1] = '\0';
- w=1;
- menu();
- break;
- }
- //------------------------------------------------------------------------
- case 3:
- {
- if (w!=1 && w!=2 && w!=3 && w!=4) // проверка
- {
- puts ("\n Ошибка! Сначала выполните второй пункт\n меню и введите количество столбцов...");
- break;
- }
- words=(char***)malloc(sizeof(char**));
- intext=(char**)malloc(sizeof(char*));
- for (i=1;!eoi;i++)
- {
- printf("Введите строку под номером %d\n",i);
- countstr++;
- tmp[0]='\0';
- fgets(tmp, 256, stdin);
- if ( tmp[strlen(&tmp[0])-1] == '\n')
- tmp[strlen(&tmp[0])-1] = '\0';
- int k=0,j=0,count=0,lenword=0;
- char *b;
- b=tmp;
- numword=0;
- words=(char ***)realloc(words, (countstr+1)*sizeof(char**));
- intext=(char**)realloc(intext, (countstr+1)*sizeof(char*));
- intext[i]=(char*)malloc((strlen(tmp)+1)*sizeof(char));
- strcat(intext[countstr],tmp);
- while (*b != '\0')
- {
- char buf[150];
- buf[0]='\0';
- while ( !strchr(space, *b) && *b != '\0' )
- {
- buf[strlen(&buf[0])+1]='\0';
- buf[strlen(&buf[0])]=*b;
- ++b;
- }
- words[countstr]=(char**)realloc(words[countstr],(numword+1)*sizeof(char*));
- lenword=strlen(&buf[0])+1;
- buf[strlen(&buf[0])+1]='\0';
- buf[strlen(&buf[0])]=*b;
- b++;
- numword++;
- words[countstr][numword]=(char*)malloc((lenword+1)*sizeof(char));
- strcat(words[countstr][numword],buf);
- }
- count=0;
- for (k=1;k<=numword;k++)
- {
- count=1;
- for (j=k+1;j<=numword;j++)
- {
- if (strcmp(words[countstr][k],words[countstr][j])==0)
- count++;
- }
- if (count>nword)
- eoi=1;
- }
- kol_words[countstr]=numword;
- }
- w=2;
- menu();
- break;
- }
- //------------------------------------------------------------------------
- case 4:
- {
- if (w!=2 && w!=3 && w!=4) // проверка
- {
- puts ("\n Ошибка! Сначала выполните третий\n пункт меню и введите первую строку...");
- break;
- }
- for (i=1;i<=countstr;i++)
- {
- puts(intext[i]);
- }
- w=3;
- menu();
- break;
- }
- //------------------------------------------------------------------------
- case 5:
- {
- if (w!=3 && w!=4 && w!=2) // проверка
- {
- puts ("\n Ошибка! Сначала выполните четвертый\n пункт меню и введите строки массива...");
- break;
- }
- outtext=(char**)malloc((countstr+1)*sizeof(char*));
- for (i=1;i<=countstr;i++)
- {
- outtext[i]=(char*)malloc(sizeof(words[i])+1);
- countswap=0;
- int j;
- for (j=1; j<=kol_words[i];j++)
- {
- if (strstr(words[i][j],substr)!=NULL)
- {
- free(words[i][j]);
- words[i][j] = (char*)malloc(sizeof(zamstr)+1);
- strcat(words[i][j], zamstr);
- countswap++;
- }
- }
- if (countswap<nswap) strcpy(outtext[i],forwardstr);
- for (j=0; j<kol_words[i]; j++)
- {
- strcat(outtext[i], words[i][j]);
- }
- }
- w=4;
- menu();
- break;
- }
- //------------------------------------------------------------------------
- case 6:
- {
- if (w!=4) // проверка
- {
- puts ("\n Ошибка! Сначала выполните пятный \n пункт меню и введите строки массива");
- break;
- }
- puts("Сформированый в результате преобразований массив");
- for (i=0;i<countstr;i++)
- {
- puts(outtext[i]);
- free(words[i]);
- }
- menu();
- break;
- }
- case 8:
- {
- exit(0);
- }
- }
- }
- while (sw==1 || sw==2 || sw==3 || sw==4 || sw==5 || sw==6);
- }
- while (sw==7);
- return 0;
- free(words);
- free(outtext);
- free(intext);
- free(space);
- free(substr);
- free(zamstr);
- free(forwardstr);
- }
- void menu()
- {
- puts("Меню:");
- puts("Введите 1 чтобы увидеть текст задания");
- puts("Введите 2 чтобы ввести дополнительные данные, такие как строка разделителей и т.д.");
- puts("Введите 3 чтобы ввести текст");
- puts("Введите 4 чтобы вывести исходный текст");
- puts("Введите 5 чтобы проверить текст на искомые слова");
- puts("Введите 6 чтобы вывести полученый текст");
- puts("Введите 7 чтобы перезапустить программу и повторить вычисления");
- puts("Введите 8 для выхода из программы");
- }
- void text()
- {
- puts("Ввести строку символов разделителей и массив строк текста с неизвестным количеством строк.");
- puts("Признаком окончания ввода текста является ввод строки, в которой встречается больше заданного количества одинаковых слов.");
- puts("В строках введенного текста заменить слова, которые заканчиваются на заданную в исходных данных подстроку символов,");
- puts("на другое слово, также заданного в исходных данных.");
- puts("Перед строками, количество замен в которых не превышает некоторое число, вставить заданную строку.");
- puts("Вывести преобразованный текст.");
- }
Add Comment
Please, Sign In to add comment