Работа с текстом

Автор работы: Пользователь скрыл имя, 22 Марта 2012 в 19:09, курсовая работа

Краткое описание

Разработать алгоритм и написать программу исходя из индивидуального задания
Индивидуальное задание:
Задан текст, содержащий произвольное количество строк, в которых отдельные слова могут разделяться одним или несколькими пробелами и знаками пунктуации (перенос слов с одной строки на другую не используется). Сформировать новый текст, который является результатом следующего преобразования исходного текста: заменить слова, содержащие цифры, на другое слово.

Содержание работы

Цель работы ………………………………………………………………...……...……. 3
Задание ……………………………………………………………………….………….. 3
Уточнение задания ……………………………………………………………………… 3
Контрольные примеры .………………………...………………………………………. 3
Описание переменных ………………………………………………………………….. 4
Описание алгоритма ……………………………………………………………………. 4
Функции …………………………………………………………………………………. 6
Функция vvod …………………………………………………………………..…… 6
Функция vivod ……………………………………………………………………… 8
Функция free1 ………………………………………………………………………. 9
Функция menu ………………………………………………………..……..……… 9
Функция help …………………………………………………………………..…… 9
Функция zamena …………………….…………………………………………….. 10
Функция vvod_slova……………………………………………………………….. 13
Блок-схема главной функции ……………………………….………...……………… 14
Иерархическая структура программы ……………………………………………….. 17
Текст программы ……………………………………………………………………… 18
Инструкция пользователю …………………………………………………….……… 25
Набор тестов …………………………………………………………………...……… 25
Результат выполнения программы …………………………………………………… 26
Вывод ………………………………………………………………………………….. 26

Содержимое работы - 1 файл

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

— 854.95 Кб (Скачать файл)

                                            free (slovo);

                                            slovo = NULL;

                                          }

                                    slovo = vvod_slova();

                                  }

                            break;                     

                      case 4:

                            if (z == 0)

                                  printf("\nОшибка, введите первый пункт меню\n");

                            else

                                  {

                                    if (newtxt != NULL)

                                          free1(newtxt, kolstrok);

                                    g = 1;

                                    if (slovo != NULL)

                                          {

                                            newtxt = zamena(text, slovo, kolstrok, &b);

                                            printf("\nЗамена слов проведена успешно\n");

                                          }

                                    else

                                          printf("\nОшибка, не было введено слово, выберите

                                                         3-ий пункт меню\n");

                                  }

                            break;

                      case 5:

                            if (z == 0)

                                   printf("\nОшибка, введите первый пункт меню\n");

                            else

                                  {

                                    if(g == 1)

                                          {

                                            printf("\n Новый текст: \n\n\n");

                                            vivod(newtxt, kolstrok);

                                          }

                                    else

                                          printf("\nНовый текст не был сформирован. Так как не был

                                                        выбран 4-ый пункт меню\n");

                                  }

                            break;

                      case 6:

                            help();

                            printf("\nДля выхода в меню нажмите любую клавишу\n");

                            getch();

                            break;

                      case 7:

                            if (text!= NULL)

                                  free1(text, kolstrok);  

                            if (newtxt != NULL)

                                  free1(newtxt, kolstrok);

                            if (slovo != NULL)

                                  free (slovo);

                            printf("\nДля выхода из программы нажмите любую клавишу\n");

                            getch();

                            break;

                      default:

                            printf("\nОшибка, введите номер операции: \n");

                    }

             }

      while(f != 7);    

//.............................меню.............................................

void menu()

{

      printf("\n**************************************МЕНЮ*************************

     *************\n\n"

             "1.Ввод текста;\n"

             "2.Контрольный вывод текста;\n"

             "3.Ввод слова для замены;\n"

             "4.Замена слов, содержащих числа  на введённое слово;\n"

             "5.Вывод изменённого текста;\n"

             "6.Помощь пользователю;\n"

             "7.Выход из программы;\n"

             "\n\n\n\n\n\nВведите номер операции\n");

}

//..........................помощь..............................................

void help()

{

      printf("\n*******************************Помощь

                    пользователю******************************\n"

             "\n1. Для того, чтобы ввести текст, необходимо выбрать 1-ый пункт меню\n"

             "\n2. Текст может содержать произвольно  количество строк\n"

             "\n3. Для перехода на следующую  строку используется клавиша  ENTER\n"

             "\n4. Для прекращения ввода текста  необходимо нажать два раза  клавишу 

                      ENTER\n"

             "\n5. Если необходимы пустые  строки в тексте, то необходимо  использовать 

                     один раз ENTER и один раз ПРОБЕЛ на каждой строке\n"

             "\n6. Для вывода введённого текста  на экран используется 2-ой пункт 

                      меню\n"

             "\n7. Для того, чтобы ввести слово, на которое будут заменяться слова,

                      Содержащие цифры, необходимо выбрать 3-ий пункт меню , ввод слова             

                      прекращается после нажатия клавиши ПРОБЕЛ \n"

             "\n8. Для замены слов, содержащие  цифры, на введённое слово,  необходимо 

                      использовать 4-ый пункт меню\n"

             "\n9. Для вывода нового текста  необходимо использовать 5-ый пункт 

                       меню\n"

             "\n10. Для вызова справки необходимо  использовать 6-ой пункт меню\n"

             "\n11. Для выхода необходимо  использовать 7-ой пункт меню\n\n"

             "\nРазработчик: студент группы №1307 Ляховец Вадим");

}

//.....................Ввод текста..............................................

char** vvod(int* stroki)

{

      char** text = NULL;      //Массив указатель(текст)       

      int i, j;                              //счётчик по строкам и счётчик по символам

      int w, v = 0;           //переменные для организации перехода на следующую строку  

                                        и выхода из набора текста

      char s[81];                 //вводимая строка

      printf("\nВведите текст\n");

      for(i = 0; v != 1; i ++)

            {

              w = 0;

              for(j = 0; w != 1; j ++)

                    {

                      s[j] = getchar();    //ввод символа

                      if(s[j] == '\n')      //переход на следующую строку

                            {

                              w = 1;

                              s[j] = '\0'; 

                            }

                      if(s[0] == '\0')     //конец набора текста

                            v = 1;      

                      if(j == 79)          //переход на следующую строку

                            {

                              w = 1;

                              s[80] = '\0';

                            }     

                    }   

              text = (char **) realloc(text,(i+1)*sizeof(char*));  //выделение памяти для строк

              text[i] = (char *) malloc((strlen(s)+1)*sizeof(char));

              strcpy(text[i], s);              //копирование введённой строки в массив указателей

              for(j = 0; j < strlen(s); j ++)  //обнуление строки

                    s[j] = 0;

            }

      *stroki = i;       //количество строк

      return text;

}

//...........................Вывод текста.......................................

void vivod(char** massiv, int stroki)

{

      int i, j;

      for(i = 0; i < stroki; i ++)

            {

              for(j = 0; j < strlen(*(massiv+i)); j ++)

                    printf("%c", *(*(massiv+i)+j));  //вывод посимвольно

              if(*(*(massiv+i)+80) != '\0'||*(*(massiv+i)+1) == '\0') 

                                                                                   //переход на следующую строку

                    printf("\n"); 

            }

}

//.........................Ввод слова  для замены................................

char* vvod_slova()

{    

      char* slovo = NULL;  //указатель навводимое слово

      int j = 0;           //счётчик символов

      int w = 0;           //переменная для организации выхода из набора слова

      char key;            //вводимый символ

      printf("\nВведите слово\n");

      for(j = 0; w != 1; j ++)

            {

              slovo =(char*)realloc(slovo, (j+1)*sizeof(char));

                                                      //выделение памяти под символ вводимой строки

              key = getchar();    //ввод символа

              *(slovo+j) = key;   //копирование символа в строку

              if(*(slovo+j) == ' ') //конец ввода слова

                    {

                      w = 1;

                      *(slovo+j) = '\0';

                    }        

            }

      return slovo;

}

//.................Освобождение динамической памяти.............................

char** free1(char** massiv, int stroki)

{

      int i;    //счётчик по строкам

      for (i = 0; i < stroki; i ++)

            free (massiv[i]); //освобождение памяти

      free (massiv);

      massiv = NULL;  //обнуление массива

      return NULL;

}

//.....................Замена слов, содержащих числа............................

char** zamena(char** text, char* slovo, int kolstrok)

{

      int i;                              //переменная для организации цикла

      int j;                              //счётчик по символу первоначальной строки

      int y;                              //флажок для замены

      int s;                              //длина копированного слова из первоначальной строки

      int e;                              //переменная для организации цикла

      int q;                              //счётчик по символу новой строки

      char** newtxt = NULL;               //указатель новый текст

      char* t1 = NULL;                    //указатель на первоначальную строку

      char* t2 = NULL;                    //указатель на новую строку

      for(i = 0; i < kolstrok; i ++)          //пока не конец текста

            {

              q = 0;

              for(j = 0; j < strlen(*(text+i)); j ++)       //копирование строки в строку t1

                    {

                      t1 =(char*)realloc(t1, (j+1)*sizeof(char));

                                                                                       //выделение памяти посимвольно

                      *(t1+j) = *(*(text+i)+j);                           //посимвольное копирование

                    }  

              t1 =(char*)realloc(t1, (j+1)*sizeof(char));     //выделение памяти под признак                  

                                                                                                                       конца строки

Информация о работе Работа с текстом