Usow_Maxim

Lab_7.9

Mar 9th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int Write_int()
  5. {
  6.     char arr[10];
  7.     int value = 0;
  8.     while(true)
  9.     {
  10.         scanf("%s", arr);
  11.         if(atoi(arr))
  12.         {
  13.             value = atoi(arr);
  14.             break;
  15.         }
  16.         else
  17.             printf("Введите значение n > 0: ");
  18.     }
  19.     return value;
  20. }
  21.  
  22. int strSize(char* str)
  23. {
  24.     int i = 0;
  25.     while(str[i] != '\0')
  26.         i++;
  27.     return i;
  28. }
  29.  
  30. char** FileRead(int &Size)
  31. {
  32.     char** str = NULL;
  33.     char** copyStr = NULL;
  34.     Size = 0;
  35.     printf("Введите название файла: ");
  36.     char fileName[100];
  37.     scanf("%s", fileName);
  38.     FILE* f = fopen(fileName, "r");
  39.     if(f != NULL)
  40.     {
  41.         printf("Чтение:\n");
  42.         char buf[1000];
  43.         while(!feof(f))
  44.         {
  45.             if(fscanf(f, "%[^\n]\n", buf))
  46.             {
  47.                 char** copyStr = new char*[Size + 1];
  48.                 for(int i = 0; i < Size; i++)
  49.                 {
  50.                     copyStr[i] = new char[strlen(str[i])];
  51.                     strcpy(copyStr[i], str[i]);
  52.                     delete[] str[i];
  53.                 }
  54.                 delete[] str;
  55.                 str = new char*[Size + 1];
  56.                 for(int i = 0; i < Size; i++)
  57.                 {
  58.                     str[i] = new char[strlen(copyStr[i])];
  59.                     strcpy(str[i], copyStr[i]);
  60.                     delete[] copyStr[i];
  61.                 }
  62.                 delete[] copyStr;
  63.                 str[Size] = new char[strlen(buf)];
  64.                 strcpy(str[Size], buf);
  65.                 printf("%s\n", str[Size]);
  66.                 Size++;
  67.             }
  68.         }
  69.     }
  70.     else
  71.     {
  72.         printf("Ошибка чтения!\n");
  73.     }
  74.     fclose(f);
  75.     return str;
  76. }
  77.  
  78. void Obrab(char**str, int Size)
  79. {
  80.  
  81.     char** copyStr = new char*[Size];
  82.     char** tokStr = new char*[Size];
  83.  
  84.     //Удаление первого слова в строке
  85.     for(int i = 0; i < Size; i++)
  86.     {
  87.         copyStr[i] = new char[strlen(str[i])];
  88.         strcpy(copyStr[i], str[i]);
  89.         tokStr[i] = strchr(copyStr[i], ' ');
  90.     }
  91.     //Сортировка по алфавиту.
  92.     int cur = 0;
  93.     int* index = new int[Size];
  94.     for(int i = 0; i < Size; i++)
  95.         index[i] = i;
  96.     for(int i = 0; i < Size; i++)
  97.         for(int j = i + 1; j < Size; j++)
  98.             if(strcmp(tokStr[i], tokStr[j]) > 0)
  99.             {
  100.                 cur = index[i];
  101.                 index[i] = index[j];
  102.                 index[j] = cur;
  103.             }
  104.  
  105.     //Вывод
  106.     printf("Сортировка:\n");
  107.     for(int i = 0; i < Size; i++)
  108.     {
  109.         printf("%s\n", str[index[i]]);
  110.         delete[] copyStr[i];
  111.         delete[] tokStr[i];
  112.     }
  113.     delete[] copyStr;
  114.     delete[] tokStr;
  115.     printf("\n");
  116. }
  117.  
  118. void Output(char** str, int Size)
  119. {
  120.     printf("Вывод:\n");
  121.     for(int i = 0; i < Size; i++)
  122.     {
  123.         printf("%s\n", str[i]);
  124.     }
  125.     printf("\n");
  126. }
  127.  
  128. int main()
  129. {
  130.     SetConsoleCP(1251);
  131.     SetConsoleOutputCP(1251);
  132.  
  133.     int Size = 0;
  134.     char** str = NULL;
  135.  
  136.     bool Exit = false;
  137.     while(!Exit)
  138.     {
  139.         printf("---------------\n1.Загрузка из файла\n2.Обработка данных\n3.Вывод результата на экран.\n4.Выход\n---------------\nВыбор: ");
  140.         switch(Write_int())
  141.         {
  142.             case 1:
  143.                 str = FileRead(Size);
  144.                 break;
  145.             case 2:
  146.                 Obrab(str, Size);
  147.                 break;
  148.             case 3:
  149.                 Output(str, Size);
  150.                 break;
  151.             case 4:
  152.                 Exit = true;
  153.                 break;
  154.             default:
  155.                 break;
  156.         }
  157.     }
  158.  
  159.     //Чистка данных
  160.     for(int i = 0; i < Size; i++)
  161.         delete[] str[i];
  162.     delete[] str;
  163.  
  164.     return 0;
  165. }
Add Comment
Please, Sign In to add comment