Перевести с С++ на чистый С - C (СИ)
Формулировка задачи:
Дан текстовый файл. Создать символьный файл, содержащий все символы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке их первого появления в тексте.
#include <iostream> #include <string> #include <sstream> #include <algorithm> #include <fstream> #include <set> #include <vector> #include <iterator> using namespace std; int main() { fstream file; file.open("d:\\in.txt", ios::in); if (!file.is_open()) { cerr << "Error open file" << '\n'; return EXIT_FAILURE; } vector<string> text; string line; while(getline(file, line)) { text.push_back(line); } set<char> st; for_each(text.begin(), text.end(), [&st](string s) { st.insert(s.begin(), s.end()); }); copy(st.begin(),st.end(), ostream_iterator<char> (cout, " ")); return EXIT_SUCCESS; }
Решение задачи: «Перевести с С++ на чистый С»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stddef.h> int main(void) { const char* in_filename = "in.txt"; const char* out_filename = "out.txt"; FILE* in_file; FILE* out_file; char in_buf[256] = ""; char out_buf[256] = ""; size_t i, j; in_file = fopen(in_filename, "r"); if(in_file == NULL) { fprintf(stderr, "Error!!! Can`t open file \"%s\"\n", in_filename); return 1; } out_file = fopen(out_filename, "w"); if(out_file == NULL) { fprintf(stderr, "Error!!! Can`t open file \"%s\"\n", out_filename); return 1; } //========================= j = 0; while(fgets(in_buf, sizeof(in_buf), in_file)) for(i = 0; in_buf[i] != '\0'; ++i) if(strchr(out_buf, in_buf[i]) == NULL) out_buf[j++] = in_buf[i]; fprintf(out_file, out_buf); fclose(in_file); fclose(out_file); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, string.h, stddef.h
- Объявляется функция main, которая возвращает значение типа int и не принимает аргументов.
- Объявляются две константы строкового типа: in_filename и out_filename, которые содержат пути к входному и выходному файлам соответственно.
- Создаются два указателя на файлы: in_file и out_file, которые будут использоваться для чтения из входного файла и записи в выходной файл соответственно.
- Создается массив char типа in_buf, который будет использоваться для чтения данных из входного файла.
- Создается массив char типа out_buf, который будет использоваться для записи данных из входного файла в выходной файл.
- Объявляются две переменные типа size_t: i и j, которые будут использоваться для индексации символов в массивах in_buf и out_buf.
- Открывается входной файл с помощью функции fopen, и если открытие не удалось, выводится сообщение об ошибке и возвращается значение 1.
- Открывается выходной файл с помощью функции fopen, и если открытие не удалось, выводится сообщение об ошибке и возвращается значение 1.
- Начинается цикл while, который будет выполняться до тех пор, пока не будет достигнут конец строки во входном файле.
- Внутри цикла while начинается вложенный цикл for, который будет выполняться для каждого символа в текущей строке входного файла.
- Внутри вложенного цикла for проверяется, есть ли текущий символ в массиве out_buf. Если символа нет, он добавляется в массив out_buf.
- После окончания вложенного цикла for, символ новой строки добавляется в массив out_buf.
- Закрывается входной файл с помощью функции fclose.
- Закрывается выходной файл с помощью функции fclose.
- Возвращается значение 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д