Advertisement
VladimirKostovsky

oh no, clear C

Dec 13th, 2023
916
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.95 KB | None | 0 0
  1. // Включение необходимых заголовочных файлов
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include <locale.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. // Максимальная длина имени файла и размер буфера для чтения/записи
  9. #define MAX_FILENAME_LENGTH 100
  10. #define MAX_BUFFER_SIZE 1000
  11.  
  12. // Поиск символа в строках и запись в выходной файл
  13. void processTask1(FILE* inputFile, FILE* outputFile, char targetSymbol) {
  14.     // Буфер для чтения из файла
  15.     char buffer[MAX_BUFFER_SIZE];
  16.     while (fgets(buffer, sizeof(buffer), inputFile) != NULL) {
  17.         size_t length = strlen(buffer);
  18.  
  19.         // Проверка каждого символа в строке на совпадение с целевым символом
  20.         for (size_t i = 0; i < length; i++) {
  21.             if (buffer[i] == targetSymbol) {
  22.                 // Запись строки в выходной файл, если найден целевой символ
  23.                 fputs(buffer, outputFile);
  24.                 fflush(outputFile);
  25.                 break;
  26.             }
  27.         }
  28.     }
  29. }
  30.  
  31. // Замена пробелов на последние символы в строках
  32. void processTask2(FILE* inputFile, FILE* outputFile, int maxReplacements) {
  33.     // Буфер для чтения из файла
  34.     char buffer[MAX_BUFFER_SIZE];
  35.  
  36.     // Чтение строк из входного файла
  37.     while (fgets(buffer, sizeof(buffer), inputFile) != NULL) {
  38.         size_t length = strlen(buffer);
  39.  
  40.         // Перебор символов в строке
  41.         for (size_t i = 0; i < length; i++) {
  42.             if (buffer[i] == ' ' && maxReplacements > 0) {
  43.                 // Замена пробелов на последние символы в строках, ограниченные максимальным количеством замен
  44.                 char lastChar = buffer[length - 2];  // Последний символ в строке
  45.                 fputc(lastChar, outputFile);
  46.                 maxReplacements--;
  47.             }
  48.             else {
  49.                 // Запись символов в выходной файл
  50.                 fputc(buffer[i], outputFile);
  51.             }
  52.         }
  53.     }
  54. }
  55.  
  56. int main() {
  57.     setlocale(LC_ALL, "Russian");
  58.  
  59.     // Имена входного и выходного файлов, выбор пользователя и буфер для имени выходного файла
  60.     char inputFileName[MAX_FILENAME_LENGTH];
  61.     char outputFileName[MAX_FILENAME_LENGTH + 4];  // +4 для ".out"
  62.     int choice;
  63.  
  64.     // Ввод пользователем выбора задачи
  65.     printf("Выберите задачу (1 для задачи 4.1, 2 для задачи 4.2): ");
  66.     scanf("%d", &choice);
  67.  
  68.     // Ввод пользователем имени входного файла
  69.     printf("Введите имя входного файла: ");
  70.     scanf("%s", inputFileName);
  71.  
  72.     // Создание имени выходного файла путем удаления расширения
  73.     snprintf(outputFileName, sizeof(outputFileName), "%.*s.out", (int)strcspn(inputFileName, "."), inputFileName);
  74.  
  75.     // Открытие входного и выходного файлов
  76.     FILE* inputFile = fopen(inputFileName, "r");
  77.     FILE* outputFile = fopen(outputFileName, "w");
  78.  
  79.     // Проверка успешности открытия файлов
  80.     if (inputFile == NULL || outputFile == NULL) {
  81.         perror("Ошибка открытия/создания файлов");
  82.         if (inputFile != NULL) fclose(inputFile);
  83.         if (outputFile != NULL) fclose(outputFile);
  84.         exit(1);
  85.     }
  86.  
  87.     // Выбор задачи и выполнение соответствующей функции
  88.     switch (choice) {
  89.     case 1: {
  90.         char targetSymbol;
  91.         // Ввод символа для поиска
  92.         printf("Введите символ для поиска: ");
  93.         scanf(" %c", &targetSymbol);
  94.         processTask1(inputFile, outputFile, targetSymbol);
  95.         printf("Задача 4.1 завершена. Результат записан в файл %s\n", outputFileName);
  96.         break;
  97.     }
  98.     case 2: {
  99.         int maxReplacements;
  100.         printf("Введите максимальное количество замен: ");
  101.         scanf("%d", &maxReplacements);
  102.         processTask2(inputFile, outputFile, maxReplacements);
  103.         printf("Задача 4.2 завершена. Результат записан в файл %s\n", outputFileName);
  104.         break;
  105.     }
  106.     default:
  107.         printf("Неправильный выбор.\n");
  108.         break;
  109.     }
  110.  
  111.     // Закрытие файлов
  112.     fclose(inputFile);
  113.     fclose(outputFile);
  114.  
  115.     return 0;
  116. }
  117.  
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement