В заданной строке каждое слово заменить количеством букв в этом слове - C (СИ)
Формулировка задачи:
Задание : в заданной строке каждое слово заменить количеством букв в этом слове ) Помогите , в С не шарю , а учитель туман ...
Буду благодарен , за помощь !
Решение задачи: «В заданной строке каждое слово заменить количеством букв в этом слове»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
int word_end(int c);
int main() {
FILE *in, *out;
int count, i, s;
in = fopen("in.txt", "r");
out = fopen("out.txt", "w");
count = i = 0;
while (!feof(in)) {
s = fgetch(in);
if (word_end(s)) {
if (count > 0) fprintf(out, "%d%c", count, s);
count = 0;
}
}
fclose(out);
fclose(in);
}
int word_end(int c) {
char *d = ",.!?:;-"; // разделители
int i, len = 7; // сколько символов
for (i = 0; i < len; i++) {
if (c == d[i]) return 1;
}
return 0;
}
Объяснение кода листинга программы
В данном коде заменяется каждое слово в заданной строке на количество букв в этом слове. Список действий:
- Подключение необходимых библиотек
- Определение функции word_end(int c), которая проверяет является ли символ концом слова
- Открытие файлов in.txt и out.txt
- Инициализация переменных count, i, s
- Чтение файла in.txt посимвольно
- Если текущий символ является концом слова (функция word_end(int c) возвращает 1), то записывается в файл out.txt количество букв в этом слове (переменная count) и добавляется текущий символ
- Если текущий символ не является концом слова, то увеличиваем счетчик count на единицу
- Закрытие файлов out.txt и in.txt В функции word_end(int c) происходит следующее:
- Инициализация переменной len равной 7 (длина строки разделителей)
- Перебор символов в строке разделителей
- Если текущий символ строки разделителей равен заданному символу, то функция возвращает 1, иначе продолжает перебор
- Если все символы строки разделителей были проверены, то функция возвращает 0 (символ не является концом слова)