Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #include <cmath>
- #include <time.h>
- // работа с файлами
- #include <cstdlib>
- #include <cctype>
- #define NUMS_CHAR_LEN 10
- // ввод строки
- char *get_string(int *len) {
- *len = 0;
- int capacity = 1;
- char *s = (char*) malloc(sizeof(char));
- char c = getchar();
- while (c != '\n') {
- s[(*len)++] = c;
- if (*len >= capacity) {
- capacity *= 2;
- s = (char*) realloc(s, capacity * sizeof(char));
- }
- c = getchar();
- }
- s[*len] = '\0';
- return s;
- }
- // ввод имени файла с проверкаой на существование
- char *get_file_name(const char *promt = "", const char *error_promt = "") {
- FILE *input_file;
- int len;
- char *input_file_name;
- bool ok = false;
- // цикл до тех пор пока пользователь не введёт нормально имя файла
- while (!ok) {
- cout << promt;
- input_file_name = get_string(&len);
- if (len > 0) {
- ok = true;
- input_file = fopen(input_file_name, "r");
- if (input_file == NULL) {
- cout << error_promt << endl;
- ok = false;
- }
- //fclose(input_file);
- }
- }
- return input_file_name;
- }
- // проверка на цифру
- int check_num(char str) {
- char nums_char[NUMS_CHAR_LEN] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
- for (int i = 0; i < NUMS_CHAR_LEN; i++) {
- if (nums_char[i] == str) {
- return i;
- }
- }
- return -1;
- }
- // удаление цифр из файла
- int del_nums_file(char* input_file_name, char* output_file_name) {
- FILE *input_file;
- FILE *output_file;
- input_file = fopen(input_file_name, "r");
- output_file = fopen(output_file_name, "w");
- char buf;
- int count = 0;
- // цикл по всему файлу
- while (!feof(input_file)) {
- fscanf(input_file, "%c", &buf);
- // если встречаем цифру то пропускам её, а если нет то записываем этот символ
- if (check_num(buf) == -1) {
- fprintf(output_file, "%c", buf);
- } else {
- count++;
- }
- }
- // закрываем файлы
- fclose(input_file);
- fclose(output_file);
- return count;
- }
- int main() {
- // смена кодировки
- system("chcp 65001");
- // переменные под имена файлов
- char *input_file_name;
- char *output_file_name;
- // вводим имена файлов
- input_file_name = get_file_name("Имя входного файла: ", "Невозможно прочитать файл. Возможно его не существует.");
- output_file_name = get_file_name("Имя выходного файла: ", "Невозможно записать или создать файл.");
- // вызываем функцию для удаления цифр
- int count = del_nums_file(input_file_name, output_file_name);
- // выводим количество удалённых цифр
- if (count > 0)
- cout << "Было удалено " << count << " цифр из файла." << endl;
- else
- cout << "В файле нет цифр." << endl;
- // очищаем память выделенную под имена файлов
- free(input_file_name);
- free(output_file_name);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment