Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.54 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <wchar.h>
  3. #include <stdlib.h>
  4.  
  5. #define STD_NUM_OF_SENT 32
  6. #define STD_LEN_OF_SENT 32
  7. #define MORE_FOR_TEXT 32
  8. #define MORE_FOR_SENT 32
  9.  
  10. #define TERM_CHAR L'\n'
  11.  
  12.  
  13.  
  14. /* Надо сделать ввод в динамический массив целого текста, с разделением на предложения */
  15.  
  16. /*Функция определяющая где надо закончить ввод в одно предложение*/
  17. int isTheEndOfSent(wchar_t T)
  18. {
  19.     if (T == L'.'){
  20.         return 1;
  21.     } else {
  22.         return 0;
  23.     }
  24. }
  25.  
  26.  
  27. wchar_t** getText(wchar_t** mainText)
  28. {
  29.     wchar_t temp;
  30.     int firstFreeSent = 0;
  31.     int firstFreeLetterOfSent = 0;
  32.     int sizeOfText = STD_NUM_OF_SENT;
  33.     int sizeOfSent = STD_LEN_OF_SENT;
  34.  
  35.     do {
  36.  
  37.         // Получаем на вход символ. В зависимости от того, какой он либо идем на следующее предложение, либо продолжаем
  38.         wscanf(L"%c", &temp);
  39.         wprintf(L"CHECK {%c}  ", temp);
  40.         mainText[firstFreeSent][firstFreeLetterOfSent] = temp;
  41.        
  42.         firstFreeLetterOfSent += 1;
  43.  
  44.  
  45.         // Расширяем массив в случае необходимости
  46.         if (sizeOfText == firstFreeSent)
  47.         {
  48.             sizeOfText += MORE_FOR_TEXT;
  49.             mainText = (wchar_t**) realloc(mainText, sizeOfText*sizeof(wchar_t*));
  50.         }
  51.  
  52.         if (sizeOfSent == firstFreeLetterOfSent)
  53.         {
  54.             sizeOfSent += MORE_FOR_SENT;
  55.             mainText[firstFreeSent] = (wchar_t*) realloc(mainText[firstFreeSent], sizeOfSent*sizeof(wchar_t));
  56.         }
  57.  
  58.         // Нужно ли заканчивать предложение?
  59.  
  60.         if (isTheEndOfSent(temp))
  61.         {
  62.             firstFreeSent += 1;
  63.             firstFreeLetterOfSent = 0;
  64.             sizeOfSent = STD_LEN_OF_SENT;
  65.         }
  66.  
  67.     } while(temp != TERM_CHAR);
  68.  
  69.     return mainText;
  70.  
  71. }
  72.  
  73. // Попробуем сделать функцию печатающую сохраненный текст
  74. // ЕЩЕ НЕ ТЕСТИРОВАЛАСЬ!
  75. void printer(wchar_t** mainText)
  76. {
  77.     for(int i = 0; mainText[i][0] != L'\0'; i++)
  78.     {
  79.         wprintf(L"%ls", mainText[i]);
  80.     }
  81. }
  82.  
  83.  
  84.  
  85. int main()
  86. {
  87.     // Создадим массив для текста
  88.     wchar_t** mainText = calloc(STD_NUM_OF_SENT, sizeof(wchar_t*));
  89.  
  90.     for (int i=0; i<STD_NUM_OF_SENT; i++)
  91.     {
  92.         mainText[i] = calloc(STD_LEN_OF_SENT, sizeof(wchar_t));
  93.     }
  94.  
  95.     // Сканируем весь текст, текст разбивается на предложения согласно функции isTheEndOfSent
  96.     mainText = getText(mainText);
  97.     wprintf(L"\nDONE\n");
  98.  
  99.  
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement