Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char ** words; // массив строк
  6. int wordCount = 0; // текущее количество строк
  7.  
  8. // процедура для вывода элемента по индексу массива
  9. void printElement(int index) {
  10. // защита от попытки доступа к несуществующему индексу
  11. if (index > wordCount - 1) {
  12. printf("Максимальный номер элемента: %d\n", wordCount - 1);
  13. }
  14. // вывод в консоль значения элемента
  15. else {
  16. printf("Элемент с номером %d = %s\n", index, words[index]);
  17. }
  18. }
  19.  
  20. // процедура сортировки массива
  21. void sortArray() {
  22. int index; // счётчик цикла
  23. int isSorted = 0; // текущий статус сортировки массива
  24. char * pTmp; // переменная для обмена элементов
  25.  
  26. // пока массив не отсортирован
  27. while (!isSorted) {
  28. isSorted = 1;
  29.  
  30. // проходим массив с 0 элемента до предпоследнего
  31. for (index = 0; index < wordCount - 1; index++) {
  32. // сравниваем текущий и следующий элементы
  33. if (strcmp(words[index], words[index + 1]) > 0) {
  34. // если они отсортированы неправильно, меняем их местами,
  35. // используя временную переменную
  36. pTmp = words[index];
  37. words[index] = words[index + 1];
  38. words[index + 1] = pTmp;
  39. // устанавливаем статус массива - не отсортирован
  40. isSorted = 0;
  41. }
  42. }
  43. }
  44. }
  45.  
  46. // вывод всех элементов массива
  47. void printArray() {
  48. int index;
  49. // проходим массив с 0 элемента до последнего
  50. for (index = 0; index < wordCount; index++) {
  51. // выводим каждый элемент в консоль
  52. printf("%d. %s\n", index, words[index]);
  53. }
  54. }
  55.  
  56. // функция, реализующая меню
  57. void menu() {
  58. printf("\nВыберите действие:");
  59. printf("\nP - вывод массива; S - сортировка; число - вывод одного элемента массива; E - выход\n");
  60.  
  61. // считывание строки символов, введенных пользователем
  62. // в зависимости от введенных символов будет вызвана соответствующая функция
  63. char input[255];
  64. scanf("%s", input);
  65.  
  66. if (!strcmp(input, "P")) {
  67. printArray();
  68. }
  69. else if (!strcmp(input, "S")) {
  70. sortArray();
  71. printArray();
  72. }
  73. else if ((input[0] >= '0') && (input[0] <= '9')) {
  74. printElement(atoi(input)); /* */
  75. }
  76. else if (!strcmp(input, "E")) {
  77. exit(0);
  78. }
  79. else {
  80. printf("Неизвестная команда!\n");
  81. }
  82. }
  83.  
  84.  
  85. // процедура, читающая файл и заполняющая массив
  86. void fileRead() {
  87. // открытие файла на чтение
  88. FILE * file;
  89. file = fopen("info.txt", "r");
  90. // переменная для чтения одного слова из файла
  91. char * word[1024];
  92.  
  93. // чтение в цикле очередного слова в файле
  94. // и сохранение в переменную word
  95. while (fscanf(file, "%s\n", &word) != EOF) {
  96. // выделение памяти для массива words
  97. if (wordCount == 0) {
  98. words = (char **)malloc(sizeof(char *));
  99. }
  100. // если длина массива больше 1, то увеличиваем длину массива на 1
  101. else {
  102. words = (char **)realloc(words, (wordCount + 1) * sizeof(char *));
  103. }
  104.  
  105. // выделение для строки памяти объёмом, равным
  106. // количеству символов в прочитанной строке + 1 (\0 символ);
  107. // сохранение указателя на строку в массиве ** words
  108. words[wordCount] = (char *)malloc(strlen(word)+1);
  109. // копирование прочитанного слова в новую строку массива words
  110. strcpy(words[wordCount], word);
  111. // увеличение счётчика слов
  112. wordCount++;
  113. }
  114. fclose(file);
  115. }
  116.  
  117.  
  118. int main(int argc, char *argv[]) {
  119. // переключение кодировки консоли для вывода русских букв
  120. system("chcp 1251");
  121. system("cls");
  122.  
  123. // вызов функции чтения файла
  124. fileRead();
  125. // вызов menu в бесконечном цикле
  126. while (1)
  127. {
  128. menu();
  129. }
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement