Определить количество букв “a” в последнем слове текста - C (СИ)
Формулировка задачи:
#include <conio.h>
#include <stdio.h>
#include <io.h>
#include <locale.h>
#include <windows.h>
FILE* f_open;
FILE* f;
int kod;
char puch[] = "c:\\file.dat";
FILE *Open_file(char*, char*);
void fun_1();
void fun_2();
void main()
{
setlocale(LC_CTYPE, "Russian");
int menu;
do
{
printf("Меню:");
printf("\n1-вывод текста из файла на экран");
printf("\n2-определение количества букв 'а' в последнем слове");
printf("\n3-выход");
printf("\nВаш выбор: ");
scanf("%d", &menu);
switch (menu)
{
case 1:
{f_open = Open_file(puch, "r");
fun_1();
fclose(f_open);
break;
}
case 2:
{
fun_2();
fclose(f_open);
}
case 3: exit(0);
break;
default:
system("cls");
puts("выберите команду 1, 2 или 3");
}
} while (1);
_getch();
}
FILE *Open_file(char*file, char* kod)
{
FILE* f;//Объявление файла
if (!(f = fopen(file, kod)))
{
printf("Ошибка открытия файла");
exit(1);
}
return f;
}
void fun_1()
{
char *strbuff;
strbuff = new char[71];
if (strbuff == NULL)
{
puts("Недостаточно памяти");
_getch();
return;
}
printf("\n\nТекст файла:\n\n");
while (fgets(strbuff, 70, f_open) != NULL)
{
printf("%s", strbuff);
}
printf("\n\n");
delete[]strbuff;
_getch();
}
void fun_2()
{
char *strbuff;
strbuff = new char[71];
if (strbuff == NULL)
{
puts("Недостаточно памяти");
_getch();
return;
}
int a = 0;
while (fgets(strbuff, 70, f_open) != NULL)
{
fscanf(f_open, "%", &strbuff);
for (int i = 70; i >= 0; i--)
{
while (strbuff [i]!=' ') {
if (strbuff[i] == 'а')
a++;
}
}};
printf("\nКоличество букв 'а' в последнем слове: %d", a);
delete[]strbuff;
_getch();
}Решение задачи: «Определить количество букв “a” в последнем слове текста»
int a = 0; *strbuff = '\0'; while (fgets(strbuff, 70, f_open) != NULL); for (int i = strlen(strbuff) - 1; i >= 0 && strbuff[i] != ' '; --i) if (strbuff[i] == 'a') ++a;
Объяснение кода листинга программы
В данном коде определен тип переменной a как int (целое число), и инициализирован нулем. Далее, в переменную strbuff записывается строка, которая заканчивается нулевым символом ('\0'). Затем, в цикле while считываются строки из файла, который открывается функцией f_open до тех пор, пока не будет достигнут конец файла (NULL).
Далее, в цикле for перебираются символы в строке strbuff в обратном порядке (от последнего к первому). Если текущий символ равен 'a', то к переменной a прибавляется единица. Переменная i уменьшается на единицу на каждой итерации цикла, пока не достигнет нуля или не встретит символ ' ' (пробел).
Таким образом, в результате выполнения данного кода будет определено количество букв a в последнем слове текста.