Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void executable_program(char* input_str) {
  6. //word_array - массив со словами, которые употреблены хотя бы единожды
  7. char** word_array = (char**) malloc(sizeof(char*) * 30);
  8. //count_using - массив с числа, которые обозначают то, сколько раз слово было употреблено
  9. //count_using[i] - сколько раз было употреблено word_array[i]
  10. int* count_using = (int*) malloc(sizeof(int) * 30);
  11. //инициализирование массивов
  12. for (int i = 0; i < 30; i++) {
  13. word_array[i] = (char*) malloc(sizeof(char) * 11);
  14. count_using[i] = 0;
  15. }
  16. //cur_word - текущее слово, т.е. слово, которое в данный момент обрабатывается функцией strtok().
  17. //Выделение первого слова во входной строке input_str с помощью функци strtok().
  18. //Разделители - те, которые указаны в задаче
  19. char* cur_word = strtok (input_str, " .");
  20. //ind - текущий индекс в массиве word_array
  21. int ind = 0;
  22. // cur_word == NULL <=> все слова во входящей строке обработаны
  23. while (cur_word != NULL) {
  24. //ind_in_past - индекс слова в массиве word_array. Если индекс = -1,
  25. //мы еще не обработали данное слово, т.е. оно встречется впервые
  26. int ind_in_past = -1;
  27. //поиск слова в массиве word_array с уже обработанными словами
  28. for (int i = 0; i < ind; i++) {
  29. //Если текущее слово cur_word и некоторое слово word_array[i] равны,
  30. //strcmp() вернет 0
  31. if (!strcmp(cur_word, word_array[i])) {
  32. ind_in_past = i;
  33. }
  34. }
  35. //Если ind_in_past != -1, текущее слово встречается не впервые.
  36. if (ind_in_past != -1) {
  37. //увеличиваем количество употреблений данного слова в массиве
  38. //count_using с количествами использований употребленных слов
  39. count_using[ind_in_past]++;
  40. }
  41. //Если ind_in_past == -1, слово встретилось впервые
  42. else {
  43. //Записываем его в массив с употребленными словами word_array с текущим индексом ind
  44. strcpy(word_array[ind], cur_word);
  45. //Количество употреблений данного слова меняем с нуля на единицу
  46. count_using[ind]++;
  47. //Увеличиваем текущий индекс на 1
  48. ind++;
  49. }
  50. //strtok() изменяет текущее слово cur_word на следующее во входной строке input_str
  51. cur_word = strtok(NULL, " .");
  52. }
  53. //ind_in_result - индекс в массиве result_words со словами, которые употреблены не единожды
  54. int ind_in_result = 0;
  55. //Цикл до ind - количества различных слов во входной строке
  56. for (int i = 0; i < ind; i++) {
  57. printf("%s, %d\n", word_array[i], count_using[i]);
  58. }
  59. return;
  60. }
  61.  
  62. int main() {
  63. //input_str - входящая строка, begin_str - это строка, в которую скопируется
  64. //begin_str. begin_str нужна для того, чтобы по требованию пользователя
  65. //выводить исходную строку. input_str вывести в этом случае невозможно,
  66. //т.к. strtok() ее преобразует
  67. char* input_str = (char*) malloc(sizeof(char) * (30*11 + 100));
  68.  
  69. // 30 - максимальное количество слов,
  70. // 10 - максимальное количество символов в них (+1 для возможного '\0'),
  71. // 100 - максимальное количество символов под разделитители
  72. // (с учетом того, что между словами всего по одной запятой, это количество даже преувеличено)
  73.  
  74.  
  75. printf("Введите строку\nМаксимальное количество слов - 30\nМаксимальное количество символов в слове - 10\n");
  76. printf("Между соседними словами пробелы, за последним словом точка\n");
  77. printf("Программа выведет количество употребелений каждого из слов\n");
  78. //считываем вводимую пользователем строку в input_str, копируем ее в begin_str
  79. scanf("%s", input_str);
  80.  
  81. //count_res_words - количество слов, записанное в result_words, т.е. количество слов
  82. //в input_str, которые употреблены чаще, чем единожды
  83. executable_program(input_str);
  84.  
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement