Работа с потоками в С

Никак не могу подружиться с потоками и работой с ними.

По заданию, нужно написать программу(используя только fopen(),fclose(),fgetc(), fputc() ), которая посчитает, сколько раз в файле будет слово ananas(регистр не имеет значения). Ответ будет записан в тот же файл (содержание файла должно быть перезаписано). В рамках программы не разрешается использование каких-либо библиотечных функций (strlen(), strcpy(), strcmp() и т.д.).

вот содержимое файла в начале:

Bananas are edible fruits, botanically berries. In some countries, bAnAnAs used for cooking are called plantains, distinguishing them from dessert bananaS. The fruits grow in clusters hanging from the top of the plant. Almost all modern edible seedless BANANAS come from two wild species of Musa acuminata and Musa balbisiana. The scientific names of most cultivated bananas are Musa acuminata, Musa balbisiana, and Musa X paradisiaca, depending on their genomic constitution.

содержимое файла в конце:

5

Могли бы вы помочь с написанием этой программы или похожими примерами по работе с потоками.


Ответы (1 шт):

Автор решения: Mikhailo

Вот простой пример, как это можно сделать. Не лучший, но простой и без каких-либо функций, кроме перечисленных вами.

#include <stdio.h>

char ananas[6];

int checkSymbol(char c) {
    const char* search = "ANANAS";

    for (int i = 0; i < 5; ++i) ananas[i] = ananas[i + 1];

    if (c >= 'a') c -= (int)('a' - 'A');

    ananas[5] = c;

    for (int i = 0; i < 5; ++i)
        if (ananas[i] != search[i]) return 0;

    return 1;
    }

int main() {
    FILE* f = fopen("text.txt", "rt");
    int c, count = 0;

    while ((c = fgetc(f)) != EOF) count += checkSymbol(c);

    fclose(f);
    f = fopen("text.txt", "wt");
    fprintf(f, "%d\n", count);
    fclose(f);
    }
→ Ссылка