Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <wctype.h>
  3. #include <stdlib.h>
  4. #include <wchar.h>
  5. #include <locale.h>
  6. #include <string.h>
  7. #define COUNT_SENT 20
  8. #define SIZE_SENT 10
  9.  
  10.  
  11. struct Sentence
  12. {
  13. wchar_t *sentence;
  14. int len; //количество символов
  15. int size; //размер массива
  16. int words; //количество слов
  17. };
  18.  
  19.  
  20.  
  21. struct Text//Стрктура текст
  22. {
  23. struct Sentence *text;
  24. int sentences; // размер массива
  25. int count; //количество предложений
  26. };
  27.  
  28.  
  29. void input(struct Text *text)//ввод текста ,передается структура текст с переменной указателя текст
  30. {
  31. fputws(L"Пожалуйста введите текст: \n",stdout);// Вывод строки «Пожалуйста введите текст:» в стандартный поток вывода
  32. text->sentences=10;//Обращение к члену структуры («член b объекта, на который указывает a»)
  33. text->text=(struct Sentence*)malloc(sizeof(struct Sentence)*text->sentences);//создается память под массивы
  34. text->count=0; //передает в структуру текст ,что кол-во предложений в тексте 0
  35. int point =0;//была ли точка перед \n
  36. int kir=0;
  37. int count_kir = 0;
  38. wchar_t c='s';//????????????????
  39. int i=0,j=0; //индексы
  40. while((c=getwchar())!='\n')
  41. {
  42. if (j==0)
  43. {
  44. text->text[i].words=1;
  45. text->text[i].size=100;
  46. text->text[i].sentence = (wchar_t*)malloc(sizeof(wchar_t)*(text->text[i].size));
  47. }
  48.  
  49. text->text[i].sentence[j]=c;
  50. j++;
  51. point=0;
  52. if (i==text->sentences-1)
  53. {
  54. text->sentences+=COUNT_SENT;
  55. text->text=(struct Sentence*)realloc(text->text,sizeof(struct Sentence)*(text->sentences));
  56. }
  57. if(j==text->text[i].size-3)
  58. {
  59. text->text[i].size+=SIZE_SENT;
  60. text->text[i].sentence=(wchar_t*)realloc(text->text[i].sentence,sizeof(wchar_t)* (text->text[i].size));
  61. }
  62. if(((int)c>=192)&&((int)c<=255))
  63. {
  64. kir++;
  65. }
  66. if (c=='.')
  67. {
  68. text->text[i].sentence[j]='\0';
  69. text->text[i].len=j;
  70. text->text[i].count_kir=kir;
  71. kir=0;
  72. j=0;
  73. i++;
  74. text->count+=1;
  75. point=1;
  76. }
  77. else if (c==' ' || c==',')
  78. {
  79. text->text[i].words++;
  80. }
  81.  
  82. }
  83. if (point == 0)//если пользователь не поставил точку в конце последнего предолжения
  84. {
  85. if (text->text[i].sentence[j-1]==' ' || text->text[i].sentence[j]==',')
  86. {
  87. text->text[i].sentence[j-1]='.';
  88. text->text[i].sentence[j]='\0';
  89. }
  90. else{
  91. text->text[i].sentence[j]='.';
  92. text->text[i].sentence[j+1]='\0';
  93. }
  94. text->count++;
  95. text->text[i].len=j;
  96. }
  97.  
  98. }
  99.  
  100. int not_in_indexes(int*indexes,int ind,int i)
  101. {
  102. for(int j = 0 ; j<ind;j++){
  103. if (indexes[j]==i)
  104. {
  105. return 0;
  106. }
  107. }
  108. return 1;
  109. }
  110.  
  111. int comp(const void* i, const void *j)
  112. {
  113. const int *arg1 =i;
  114. const int *arg2 = j;
  115. return *arg1 - *arg2;
  116. }
  117.  
  118. void del_sent (struct Text *text)//4 абзац
  119. {
  120. int diff=0;
  121. int count;
  122. int m;//indexes[i]
  123. int stop=0;
  124. int *indexes;//какой то массив
  125. int len_indexes=10;//кол-во эл массива
  126. int ind=0;
  127. indexes= malloc(sizeof(int)*len_indexes);//выделение памяти
  128. int i ,j;
  129. for ( i = 0 ; i<text->count;i++)
  130. {
  131. for ( j = i+1 ; j <text->count;j++)
  132. {
  133. if(wcslen(text->text[i].sentence)==wcslen(text->text[j].sentence))
  134. {
  135. if(!(wcscasecmp(text->text[i].sentence,text->text[j].sentence)))
  136. {
  137. if(ind>=len_indexes-2)
  138. {
  139. len_indexes*=2;
  140. indexes=realloc(indexes,sizeof(int)*len_indexes);//скорее всего реализует память под значения для удаления предложения
  141. }
  142. if (not_in_indexes(indexes,ind,i))//проверяем есть ли индекс уже в массиве
  143. {
  144. indexes[ind]=i;
  145. ind++;
  146. }
  147. if (not_in_indexes(indexes,ind,j))
  148. {
  149. indexes[ind]=j;
  150. ind++;
  151. }
  152. }
  153. }
  154. }
  155. }
  156. qsort(indexes,ind,sizeof(int),comp); // сортировка
  157. for (int i = 0 ; i<ind;i++)
  158. {
  159. m=indexes[i]-diff;
  160. for(int j = 0 ; text->text[m].sentence[j];j++)
  161. {
  162. text->text[m].sentence[j]='\0';
  163. }
  164. count=text->count-1;
  165. for (int j = m ; j<count;j++)
  166. {
  167. if(text->text[j].size<text->text[j+1].size)
  168. {
  169. text->text[j].sentence=realloc(text->text[j].sentence,sizeof(wchar_t)*text->text[j+1].size);
  170. }
  171. text->text[j].len=text->text[j+1].len;
  172. text->text[j].size=text->text[j+1].size;
  173. text->text[j].words=text->text[j+1].words;
  174. wcscpy(text->text[j].sentence,text->text[j+1].sentence);
  175. }
  176. text->count-=1;
  177. diff+=1;
  178. }
  179. free(indexes);
  180. }
  181.  
  182. void del_lcl(struct Text *text)
  183. {
  184. for (int i = 0 ; i<text->count;i++)//цикл фор делается пока не дайдет до послднего предложения
  185. {
  186. for (int j = 0 ; j<text->text[i].len;j++)//цикл фор делается пока не дайдет до послднего предложения
  187. {
  188. if(((int)text->text[i].sentence[j]>=65)&&((int)text->text[i].sentence[j] <= 90))
  189. {
  190. int k = j;
  191. text->text[i].sentence[k] = ' ';
  192. while(text->text[i].sentence[k]!='\0'){
  193. text->text[i].sentence[k]=text->text[i].sentence[k+1];
  194. k++;
  195. }
  196. j--;
  197. text->text[i].len--;
  198. }
  199. }
  200. }
  201. }
  202.  
  203. void output(struct Text *text){
  204. fputws(L"--------------------------------------TEXT-------------------------------------\n\n",stdout);
  205. for(int k = 0 ; k< text->count;k++){
  206. fputws(text->text[k].sentence,stdout);
  207. }
  208. fputws(L"\n\n--------------------------------------TEXT-------------------------------------\n\n",stdout);
  209.  
  210. return;
  211. }
  212.  
  213.  
  214. int menu()
  215. {
  216. int i = 0;
  217. wchar_t x[90];
  218. wchar_t *end;
  219. fputws(L"-------------------------------------------------------------------------------",stdout);
  220. fputws(L"\nВведите номер действия, которое необходимо выполнить:\n\n",stdout);
  221. fputws(L"1 - Вывести номер предложения в котором встречается подстрока, задающей время вида “часы:минуты” и количество минут до текущего времени\n",stdout);
  222. fputws(L"2 - В каждом предложении удалить все заглавные латинские буквы.\n",stdout);
  223. fputws(L"3 - Отсортировать предложения по уменьшению количеству кириллических букв.\n",stdout);
  224. fputws(L"4 - Удалить все предложения в которых нет специальных символов.\n",stdout);
  225. fputws(L"5 - Вывести текст\n",stdout);
  226. fputws(L"0 - Закончить\n",stdout);
  227. fputws(L"\n-------------------------------------------------------------------------------\n\n",stdout);
  228. fputws(L"Ввод: ",stdout);
  229. int kk = 0;
  230. while((x[kk]=getwchar())!='\n')
  231. {
  232. kk++;
  233. }
  234. if (x[0]=='\n')
  235. {
  236. return 10;
  237. }
  238. x[kk]='\0';
  239. fputws(L"\n",stdout);
  240. for (int i=0;x[i]!='\0';i++)
  241. {
  242. if (iswdigit(x[i]))
  243. {
  244. continue;
  245. }
  246. else{
  247. return 10;
  248. break;
  249. }
  250. }
  251.  
  252. return (wcstol(x,&end,10));
  253. }
  254.  
  255. int main()
  256. {
  257. setlocale(LC_ALL,"");
  258. int n;
  259. struct Text text;
  260. input(&text);
  261. del_sent(&text);
  262. output(&text);
  263. while ((n=menu())!=0){
  264. switch (n)
  265. {
  266. case 1:
  267. break;
  268. case 2:
  269. del_lcl(&text);
  270. break;
  271. case 3:
  272. break;
  273. case 4:
  274. break;
  275. case 5:
  276. output(&text);
  277. break;
  278. default:
  279. fputws(L"Пожалуйста, введите корректное значение !\n",stdout);
  280.  
  281. break;
  282. }
  283. }
  284. for (int k = 0 ; k <text.sentences;k++)
  285. {
  286. free(text.text[k].sentence);
  287. }
  288. free(text.text);
  289. return 0;
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement