joannakr

Untitled

Jan 8th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.13 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<ctype.h>
  6. #include<locale.h>
  7. void linescounterforscr(FILE* inputStream, FILE* outputStream);
  8. void identificatorsCounter(FILE* inputStream, FILE* outputStream);
  9. int fileToFile(void);
  10. int fileToScreen(void);
  11. int screenToFile(void);
  12. int screenToScreen(void);
  13. int menu()
  14. {
  15. int i;
  16. printf(" ________/МЕНЮ\\_________________\n");
  17. printf("| | \n");
  18. printf("| 1.ОТ ФАЙЛ ВЪВ ФАЙЛ | \n");
  19. printf("| 2.ОТ ФАЙЛ НА ЕКРАНА | \n");
  20. printf("| 3.ОТ КЛАВИАТУРАТА ВЪВ ФАЙЛ |\n");
  21. printf("| 4.ОТ КЛАВИАТУРАТА НА ЕКРАНА |\n");
  22. printf("| 0.Изход |\n");
  23. printf("|_______________________________|\n");
  24. do {
  25. printf("Изберете опция: ");
  26. scanf("%d", &i);
  27. while (getchar() != '\n');
  28. } while (i < 0 || i> 4);
  29. return i;
  30. }
  31. int main(void)
  32. {
  33. setlocale(LC_ALL, "");
  34. while (1)
  35. {
  36. system("cls");
  37. switch (menu())
  38. {
  39. case 1: fileToFile();
  40. break;
  41. case 2: fileToScreen();
  42. break;
  43. case 3: screenToFile();
  44. break;
  45. case 4: screenToScreen();
  46. break;
  47. default:
  48. return 0;
  49. }
  50. system("pause");
  51. }
  52. }
  53. int fileToFile(void)
  54. {
  55. char inputFileName[256], outputFileName[256];
  56. FILE *inputStream, *outputStream;
  57. do
  58. {
  59. printf("Въведете името на файла, който съдържа програмата(.C): ");
  60. fgets(inputFileName, 255, stdin);
  61. inputFileName[strlen(inputFileName) - 1] = 0;
  62. } while ((inputFileName[strlen(inputFileName) - 2] == '.' && (inputFileName[strlen(inputFileName) - 1]) == 'C'));
  63.  
  64. if (!(inputStream = fopen(inputFileName, "r")))
  65. {
  66. printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
  67. return 1;
  68. }
  69. printf("Въведете името на файла, в който да се запише резултата: ");
  70. fgets(outputFileName, 255, stdin);
  71. outputFileName[strlen(outputFileName) - 1] = 0;
  72. if (!(outputStream = fopen(outputFileName, "w")))
  73. {
  74. printf("Грешка при отварянето на файла за запис на резултата. \n");
  75. return 1;
  76. }
  77.  
  78. linescounterforscr(inputStream, outputStream);
  79. rewind(inputStream);
  80. identificatorsCounter(inputStream, outputStream);
  81. fclose(inputStream);
  82. fclose(outputStream);
  83.  
  84. printf("Резултатите са записани в \"%s\".\n", outputFileName);
  85. return 0;
  86. }
  87. int fileToScreen(void)
  88. {
  89. char inputFileName[256];
  90. FILE* inputStream;
  91. printf("Въведете името на файла, който съдържа програмата(.C): ");
  92. fgets(inputFileName, 255, stdin);
  93.  
  94. inputFileName[strlen(inputFileName) - 1] = 0;
  95. if (!(inputStream = fopen(inputFileName, "r")))
  96. {
  97. printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
  98. return 1;
  99. }
  100.  
  101.  
  102. linescounterforscr(inputStream, stdout);
  103. rewind(inputStream);
  104. identificatorsCounter(inputStream, stdout);
  105. fclose(inputStream);
  106.  
  107. return 0;
  108. }
  109. int screenToFile(void)
  110. {
  111. char outputFileName[256];
  112. FILE *outputStream, *tempStream, *opened;
  113. char str[1000];
  114.  
  115. tempStream = fopen("temp.txt", "w");
  116. printf("Въведете текст, за спиране на въвеждането напишете \"save\" на нов ред\n");
  117.  
  118. do {
  119. fgets(str, 999, stdin);
  120. if (strcmp(str, "save\n"))fprintf(tempStream, "%s", str);
  121. } while (strcmp(str, "save\n"));
  122. fclose(tempStream);
  123. if ((opened = fopen("temp.", "r")) == NULL)
  124. {
  125. printf("Грешка при четенето на програмата от клавиатурата.\n");
  126. return 1;
  127. }
  128.  
  129. printf("Въведете името на файла за запис на резултата:\n");
  130. if (!fgets(outputFileName, 255, stdin))
  131. {
  132. printf("Грешка при въвеждането на име на файла за запис .\n");
  133. return 1;
  134. }
  135. outputFileName[strlen(outputFileName) - 1] = 0;
  136.  
  137. if (!(outputStream = fopen(outputFileName, "w")))
  138. {
  139. printf("Грешка при отварянето на файла за запис.\n");
  140. return 1;
  141. }
  142.  
  143. linescounterforscr(opened, outputStream);
  144. rewind(opened);
  145. identificatorsCounter(opened, outputStream);
  146. fclose(opened);
  147. fclose(outputStream);
  148.  
  149. printf("Резултатите са записани в \"%s\".\n", outputFileName);
  150. return 0;
  151. }
  152.  
  153.  
  154.  
  155.  
  156.  
  157. int screenToScreen(void)
  158. {
  159. FILE *tempStream, *opened;
  160. char str[999];
  161.  
  162. if (!(tempStream = fopen("temp.txt", "w")))
  163. {
  164. printf("Грешка при отварянето на файл за запис.\n");
  165. return 1;
  166. }
  167. printf("Въведете текст, за спиране на въвеждането напишете \"save\" на нов ред\n");
  168.  
  169. do {
  170. fgets(str, 999, stdin);
  171. if (strcmp(str, "save\n"))fprintf(tempStream, "%s", str);
  172. } while (strcmp(str, "save\n"));
  173.  
  174. fclose(tempStream);
  175. if ((opened = fopen("temp.txt", "r")) == NULL)
  176. {
  177. printf("Грешка при отварянето на файл за четене.\n");
  178. return 1;
  179. }
  180. linescounterforscr(tempStream, stdout);
  181. rewind(tempStream);
  182. identificatorsCounter(tempStream, stdout);
  183. fclose(opened);
  184.  
  185.  
  186. return 0;
  187. }
  188.  
  189.  
  190.  
  191. void linescounterforscr(FILE* inputStream, FILE* outputStream)
  192. {
  193. char c;
  194. int broi = 0;
  195. do {
  196. c = fgetc(inputStream);
  197. if (c == '\n' || c == EOF) broi++;
  198. } while (c != EOF);
  199.  
  200. fprintf(outputStream, " Броя на редовете в програмата е:%d\n", broi);
  201. }
  202.  
  203.  
  204.  
  205. void identificatorsCounter(FILE* inputStream, FILE* outputStream) {
  206. char line[1000];
  207. int flag = 0, flag1, logical = 0;
  208. unsigned i;
  209.  
  210. while ((fgets(line, sizeof line, inputStream)) != NULL)
  211. {
  212. flag1 = 0;
  213. for (i = 0; i < strlen(line); i++)
  214. {
  215. if (line[i] == '\"' && !flag) flag = 1; /*Не търсим в кавичките*/
  216. else if (line[i] == '\"' && line[i - 1] != '\\' && flag == 1) flag = 0;
  217.  
  218. if (!flag && line[i] == '/' && line[i + 1] == '/') break;
  219.  
  220. if (!flag && line[i] == '/' && line[i + 1] == '*') flag = 2;/*Не търсим в коментарите*/
  221. else if (flag == 2 && line[i] == '*' && line[i + 1] == '/') flag = 0;
  222.  
  223.  
  224. if (!flag) {
  225. if (!i || (i && (line[i - 1] == ' ' || line[i - 1] == '\t' || line[i - 1] == '{' || line[i - 1] == '}' || line[i - 1] == '(' || line[i - 1] == ')')))
  226. {
  227. if (line[i] == 'f'
  228. && line[i + 1] == 'o'
  229. && line[i + 2] == 'r' )
  230. { logical++;
  231. flag1 = 1;
  232. }
  233. else if (line[i] == 'w'
  234. && line[i + 1] == 'h'
  235. && line[i + 2] == 'i'
  236. && line[i + 3] == 'l'
  237. && line[i + 4] == 'e' )
  238. {
  239. logical++;
  240. flag1 = 1;
  241. if (line[i] == 'd' && line[i + 1] == 'o' && line[i + 2] == '{' && flag1 = 1)
  242. logical++;
  243. }
  244.  
  245.  
  246. }
  247. }
  248.  
  249. if (flag1 && line[i] == ',') logical++;
  250. else if (flag1 && line[i] == ';') flag1 = 0;
  251.  
  252. }
  253. }
  254. fprintf(outputStream, "Броят на операторите в програмата е: %d\n", logical);
  255. }
Advertisement
Add Comment
Please, Sign In to add comment