Stolar228

Untitled

Sep 8th, 2022
914
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.41 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. #include <cmath>
  6. #include <time.h>
  7.  
  8. // работа с файлами
  9. #include <cstdlib>
  10. #include <cctype>
  11.  
  12.  
  13. #define NUMS_CHAR_LEN 10
  14.  
  15. // ввод строки
  16. char *get_string(int *len) {
  17.     *len = 0;
  18.     int capacity = 1;
  19.     char *s = (char*) malloc(sizeof(char));
  20.     char c = getchar();
  21.     while (c != '\n') {
  22.         s[(*len)++] = c;
  23.         if (*len >= capacity) {
  24.             capacity *= 2;
  25.             s = (char*) realloc(s, capacity * sizeof(char));
  26.         }
  27.         c = getchar();
  28.     }
  29.     s[*len] = '\0';
  30.     return s;
  31. }
  32.  
  33. // ввод имени файла с проверкаой на существование
  34. char *get_file_name(const char *promt = "", const char *error_promt = "") {
  35.  
  36.   FILE *input_file;
  37.  
  38.   int len;
  39.   char *input_file_name;
  40.  
  41.   bool ok = false;
  42.   // цикл до тех пор пока пользователь не введёт нормально имя файла
  43.   while (!ok) {
  44.     cout << promt;
  45.     input_file_name = get_string(&len);
  46.     if (len > 0) {
  47.       ok = true;
  48.  
  49.       input_file = fopen(input_file_name, "r");
  50.  
  51.       if (input_file == NULL) {
  52.         cout << error_promt << endl;
  53.         ok = false;
  54.  
  55.       }
  56.  
  57.       //fclose(input_file);
  58.  
  59.     }
  60.   }
  61.  
  62.   return input_file_name;
  63. }
  64.  
  65. // проверка на цифру
  66. int check_num(char str) {
  67.   char nums_char[NUMS_CHAR_LEN] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
  68.   for (int i = 0; i < NUMS_CHAR_LEN; i++) {
  69.     if (nums_char[i] == str) {
  70.       return i;
  71.     }
  72.   }
  73.   return -1;
  74. }
  75.  
  76. // удаление цифр из файла
  77. int del_nums_file(char* input_file_name, char* output_file_name) {
  78.  
  79.   FILE *input_file;
  80.   FILE *output_file;
  81.  
  82.   input_file = fopen(input_file_name, "r");
  83.   output_file = fopen(output_file_name, "w");
  84.  
  85.   char buf;
  86.   int count = 0;
  87.  
  88.   // цикл по всему файлу
  89.   while (!feof(input_file)) {
  90.     fscanf(input_file, "%c", &buf);
  91.  
  92.     // если встречаем цифру то пропускам её, а если нет то записываем этот символ
  93.     if (check_num(buf) == -1) {
  94.       fprintf(output_file, "%c", buf);
  95.     } else {
  96.       count++;
  97.     }
  98.  
  99.   }
  100.  
  101.   // закрываем файлы
  102.   fclose(input_file);
  103.   fclose(output_file);
  104.  
  105.   return count;
  106. }
  107.  
  108. int main() {
  109.     // смена кодировки
  110.   system("chcp 65001");
  111.  
  112.   // переменные под имена файлов
  113.   char *input_file_name;
  114.   char *output_file_name;
  115.  
  116.   // вводим имена файлов
  117.   input_file_name = get_file_name("Имя входного файла: ", "Невозможно прочитать файл. Возможно его не существует.");
  118.   output_file_name = get_file_name("Имя выходного файла: ", "Невозможно записать или создать файл.");
  119.  
  120.   // вызываем функцию для удаления цифр
  121.   int count = del_nums_file(input_file_name, output_file_name);
  122.  
  123.   // выводим количество удалённых цифр
  124.   if (count > 0)
  125.     cout << "Было удалено " << count << " цифр из файла." << endl;
  126.  
  127.   else
  128.     cout << "В файле нет цифр." << endl;
  129.  
  130.   // очищаем память выделенную под имена файлов
  131.   free(input_file_name);
  132.   free(output_file_name);
  133.  
  134.     return 0;
  135. }
  136.  
Tags: guap
Advertisement
Add Comment
Please, Sign In to add comment