Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Включение необходимых заголовочных файлов
- #define _CRT_SECURE_NO_WARNINGS
- #include <locale.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // Максимальная длина имени файла и размер буфера для чтения/записи
- #define MAX_FILENAME_LENGTH 100
- #define MAX_BUFFER_SIZE 1000
- // Поиск символа в строках и запись в выходной файл
- void processTask1(FILE* inputFile, FILE* outputFile, char targetSymbol) {
- // Буфер для чтения из файла
- char buffer[MAX_BUFFER_SIZE];
- while (fgets(buffer, sizeof(buffer), inputFile) != NULL) {
- size_t length = strlen(buffer);
- // Проверка каждого символа в строке на совпадение с целевым символом
- for (size_t i = 0; i < length; i++) {
- if (buffer[i] == targetSymbol) {
- // Запись строки в выходной файл, если найден целевой символ
- fputs(buffer, outputFile);
- fflush(outputFile);
- break;
- }
- }
- }
- }
- // Замена пробелов на последние символы в строках
- void processTask2(FILE* inputFile, FILE* outputFile, int maxReplacements) {
- // Буфер для чтения из файла
- char buffer[MAX_BUFFER_SIZE];
- // Чтение строк из входного файла
- while (fgets(buffer, sizeof(buffer), inputFile) != NULL) {
- size_t length = strlen(buffer);
- // Перебор символов в строке
- for (size_t i = 0; i < length; i++) {
- if (buffer[i] == ' ' && maxReplacements > 0) {
- // Замена пробелов на последние символы в строках, ограниченные максимальным количеством замен
- char lastChar = buffer[length - 2]; // Последний символ в строке
- fputc(lastChar, outputFile);
- maxReplacements--;
- }
- else {
- // Запись символов в выходной файл
- fputc(buffer[i], outputFile);
- }
- }
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- // Имена входного и выходного файлов, выбор пользователя и буфер для имени выходного файла
- char inputFileName[MAX_FILENAME_LENGTH];
- char outputFileName[MAX_FILENAME_LENGTH + 4]; // +4 для ".out"
- int choice;
- // Ввод пользователем выбора задачи
- printf("Выберите задачу (1 для задачи 4.1, 2 для задачи 4.2): ");
- scanf("%d", &choice);
- // Ввод пользователем имени входного файла
- printf("Введите имя входного файла: ");
- scanf("%s", inputFileName);
- // Создание имени выходного файла путем удаления расширения
- snprintf(outputFileName, sizeof(outputFileName), "%.*s.out", (int)strcspn(inputFileName, "."), inputFileName);
- // Открытие входного и выходного файлов
- FILE* inputFile = fopen(inputFileName, "r");
- FILE* outputFile = fopen(outputFileName, "w");
- // Проверка успешности открытия файлов
- if (inputFile == NULL || outputFile == NULL) {
- perror("Ошибка открытия/создания файлов");
- if (inputFile != NULL) fclose(inputFile);
- if (outputFile != NULL) fclose(outputFile);
- exit(1);
- }
- // Выбор задачи и выполнение соответствующей функции
- switch (choice) {
- case 1: {
- char targetSymbol;
- // Ввод символа для поиска
- printf("Введите символ для поиска: ");
- scanf(" %c", &targetSymbol);
- processTask1(inputFile, outputFile, targetSymbol);
- printf("Задача 4.1 завершена. Результат записан в файл %s\n", outputFileName);
- break;
- }
- case 2: {
- int maxReplacements;
- printf("Введите максимальное количество замен: ");
- scanf("%d", &maxReplacements);
- processTask2(inputFile, outputFile, maxReplacements);
- printf("Задача 4.2 завершена. Результат записан в файл %s\n", outputFileName);
- break;
- }
- default:
- printf("Неправильный выбор.\n");
- break;
- }
- // Закрытие файлов
- fclose(inputFile);
- fclose(outputFile);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement