Напишите программу every_second.c, которая на основе исходного файла создаст новый так, что во второй файл будет записано каждое второе слово, считанное из первого файла между словами START и STOP. Названия файлов указываются как два аргумента программы. Словом считается каждая правильная последовательность символов, отделённая пробелом.
Запись слов (каждого второго) начинается после того, как во вступительном файле найдётся слово START. Слова (каждое второе) перестают записываться в файл после нахождения слова STOP.
В рамках программы не разрешается использование каких-либо библиотечных функций (strlen(), strcpy(), strcmp() и т.д.). Разрешается использовать следующие 4 функции:
fopen() для инициализации работы с файлом
fclose() для завершения работы с файлом
fgetc() для чтения из фала
fputc() для записи в файл
Программа будет принимать два аргумента:
1.первым из аргументов будет название файла на входе
2.вторым аргументом будет название файла для записи
После успешного завершения программы в директории должен появиться созданный файл. В случае, если содержание файла input.txt следующее:
"Hello start START Hello Kitty, say, how are you doing today? STOP"
Содержание файла output.txt после успешного завершения программы следующее:
"Kitty, how you today?"
Ответы
#include <stdio.h>
int main(int argc, char *argv[]) {
// Проверяем, что были переданы два аргумента (имена файлов)
if (argc != 3) {
printf("Usage: every_second input_file output_file\n");
return 1;
}
// Открываем файлы на чтение и запись
FILE *input_file = fopen(argv[1], "r");
FILE *output_file = fopen(argv[2], "w");
// Проверяем, что файлы успешно открыты
if (!input_file || !output_file) {
printf("Error opening files\n");
return 1;
}
// Считываем каждое слово из файла на входе
int word_count = 0; // Счетчик слов
char c; // Текущий символ
while ((c = fgetc(input_file)) != EOF) {
// Если мы нашли слово START, то начинаем записывать в файл на выходе
if (c == 'S' && fgetc(input_file) == 'T' && fgetc(input_file) == 'A' && fgetc(input_file) == 'R' && fgetc(input_file) == 'T') {
// Пропускаем один символ (пробел после слова START)
fgetc(input_file);
word_count = 1;
continue;
}
// Если мы нашли слово STOP, то заканчиваем запись в файл
if (c == 'S' && fgetc(input_file) == 'T' && fgetc(input_file) == 'O' && fgetc(input_file) == 'P') {
break;
}
// Если мы нашли пробел, то увеличиваем счетчик слов
if (c == ' ') {
word_count++;
continue;
}
// Если мы нашли слово, которое нужно записать (каждое второе слово), то записываем его в файл на выходе
if (word_count % 2 == 0) {
fputc(c, output_file);
}
}
// Закрываем файлы
fclose(input_file);
fclose(output_file);
return 0;
}