Определить количество букв “a” в последнем слове текста - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, надеюсь, кто-нибудь поможет) Нужно написать программу, которая: -выводит текст из файла на экран дисплея; -определяет количество букв “a” в последнем слове текста Первая часть реализована, со второй проблема, хотя в последнем слове в файле есть буква а, программа выдает результат 0
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <io.h>
  4. #include <locale.h>
  5. #include <windows.h>
  6. FILE* f_open;
  7. FILE* f;
  8. int kod;
  9. char puch[] = "c:\\file.dat";
  10. FILE *Open_file(char*, char*);
  11. void fun_1();
  12. void fun_2();
  13. void main()
  14. {
  15. setlocale(LC_CTYPE, "Russian");
  16. int menu;
  17. do
  18. {
  19. printf("Меню:");
  20. printf("\n1-вывод текста из файла на экран");
  21. printf("\n2-определение количества букв 'а' в последнем слове");
  22. printf("\n3-выход");
  23. printf("\nВаш выбор: ");
  24. scanf("%d", &menu);
  25. switch (menu)
  26. {
  27. case 1:
  28. {f_open = Open_file(puch, "r");
  29. fun_1();
  30. fclose(f_open);
  31. break;
  32. }
  33. case 2:
  34. {
  35. fun_2();
  36. fclose(f_open);
  37. }
  38. case 3: exit(0);
  39. break;
  40. default:
  41. system("cls");
  42. puts("выберите команду 1, 2 или 3");
  43. }
  44. } while (1);
  45. _getch();
  46. }
  47. FILE *Open_file(char*file, char* kod)
  48. {
  49. FILE* f;//Объявление файла
  50. if (!(f = fopen(file, kod)))
  51. {
  52. printf("Ошибка открытия файла");
  53. exit(1);
  54. }
  55. return f;
  56. }
  57. void fun_1()
  58. {
  59. char *strbuff;
  60. strbuff = new char[71];
  61. if (strbuff == NULL)
  62. {
  63. puts("Недостаточно памяти");
  64. _getch();
  65. return;
  66. }
  67. printf("\n\nТекст файла:\n\n");
  68. while (fgets(strbuff, 70, f_open) != NULL)
  69. {
  70. printf("%s", strbuff);
  71. }
  72. printf("\n\n");
  73. delete[]strbuff;
  74. _getch();
  75. }
  76. void fun_2()
  77. {
  78. char *strbuff;
  79. strbuff = new char[71];
  80. if (strbuff == NULL)
  81. {
  82. puts("Недостаточно памяти");
  83. _getch();
  84. return;
  85. }
  86. int a = 0;
  87. while (fgets(strbuff, 70, f_open) != NULL)
  88. {
  89. fscanf(f_open, "%", &strbuff);
  90. for (int i = 70; i >= 0; i--)
  91. {
  92. while (strbuff [i]!=' ') {
  93. if (strbuff[i] == 'а')
  94. a++;
  95. }
  96. }};
  97. printf("\nКоличество букв 'а' в последнем слове: %d", a);
  98. delete[]strbuff;
  99. _getch();
  100. }
Что не так, подскажите, пожалуйста)

Решение задачи: «Определить количество букв “a” в последнем слове текста»

textual
Листинг программы
  1.     int a = 0;
  2.     *strbuff = '\0';
  3.     while (fgets(strbuff, 70, f_open) != NULL);
  4.  
  5.     for (int i = strlen(strbuff) - 1; i >= 0 && strbuff[i] != ' '; --i)
  6.         if (strbuff[i] == 'a') ++a;

Объяснение кода листинга программы

В данном коде определен тип переменной a как int (целое число), и инициализирован нулем. Далее, в переменную strbuff записывается строка, которая заканчивается нулевым символом ('\0'). Затем, в цикле while считываются строки из файла, который открывается функцией f_open до тех пор, пока не будет достигнут конец файла (NULL). Далее, в цикле for перебираются символы в строке strbuff в обратном порядке (от последнего к первому). Если текущий символ равен 'a', то к переменной a прибавляется единица. Переменная i уменьшается на единицу на каждой итерации цикла, пока не достигнет нуля или не встретит символ ' ' (пробел). Таким образом, в результате выполнения данного кода будет определено количество букв a в последнем слове текста.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы