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

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

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

Здравствуйте, надеюсь, кто-нибудь поможет) Нужно написать программу, которая: -выводит текст из файла на экран дисплея; -определяет количество букв “a” в последнем слове текста Первая часть реализована, со второй проблема, хотя в последнем слове в файле есть буква а, программа выдает результат 0
#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” в последнем слове текста»

textual
Листинг программы
    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 в последнем слове текста.

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


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

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

9   голосов , оценка 4.333 из 5
Похожие ответы