Дан символьный файл. Найти в нем слова, в которые буква "a" входит не менее 2х раз (без учета регистра) - C (СИ)
Формулировка задачи:
Дан символьный файл. Найти в нем слова в которые буква "a" входит не менее 2х раз ( без учета регистра ): Примечание: здесь для чтения из файла лучше использовать fscanf. (не использовать ф-ии из библиотеки string.h)
и еще подскажите, пожалуйста, как изменить формат файла .*txt на .*dat
просто переименовать не получается
Решение задачи: «Дан символьный файл. Найти в нем слова, в которые буква "a" входит не менее 2х раз (без учета регистра)»
textual
Листинг программы
#include <stdio.h>
int main() {
const char CFile[] = "file.txt";
int cnt;
char text[64], * p;
FILE* f = fopen(CFile, "r");
if (f == NULL) {
perror(CFile);
return 1;
}
while (fscanf(f, "%63s", text) == 1) {
cnt = 0;
for (p = text; *p; ++p) {
if ((*p == 'a') || (*p == 'A')) {
cnt++;
}
}
if (1 < cnt) {
printf("%s : %d\n", text, cnt);
}
}
fclose(f);
return 0;
}
Объяснение кода листинга программы
В этом коде на языке C выполняется поиск слов в текстовом файле, в которых буква a встречается не менее двух раз (без учета регистра).
- В начале определяется имя файла, с которым будет работать программа, и сохраняется в константной строке CFile.
- Затем объявляются необходимые переменные:
- cnt - счетчик, который будет отслеживать количество букв
aв текущем слове; - text - массив символов, в котором будет храниться текущее слово;
- p - указатель на текущий символ в массиве text;
- f - указатель на файл, который открывается для чтения.
- cnt - счетчик, который будет отслеживать количество букв
- Если файл не может быть открыт, выводится сообщение об ошибке и возвращается код завершения 1.
- В цикле while с помощью функции fscanf считываются слова из файла и сохраняются в массиве text.
- Для каждого слова запускается цикл for, который перебирает все символы слова. Если символ равен
aилиA, увеличивается счетчик cnt. - После проверки всех символов слова, если cnt больше 1, слово выводится на экран.
- После окончания чтения файла, функция fclose закрывает файл, а функция fscanf возвращает значение EOF.
- Если в цикле while было прочитано хотя бы одно слово, соответствующее условию, программа выводит сообщение об успешном выполнении.
- В конце программы возвращается код завершения 0, что означает успешное выполнение.