Перевести с С++ на чистый С - 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h, string.h, stddef.h
  2. Объявляется функция main, которая возвращает значение типа int и не принимает аргументов.
  3. Объявляются две константы строкового типа: in_filename и out_filename, которые содержат пути к входному и выходному файлам соответственно.
  4. Создаются два указателя на файлы: in_file и out_file, которые будут использоваться для чтения из входного файла и записи в выходной файл соответственно.
  5. Создается массив char типа in_buf, который будет использоваться для чтения данных из входного файла.
  6. Создается массив char типа out_buf, который будет использоваться для записи данных из входного файла в выходной файл.
  7. Объявляются две переменные типа size_t: i и j, которые будут использоваться для индексации символов в массивах in_buf и out_buf.
  8. Открывается входной файл с помощью функции fopen, и если открытие не удалось, выводится сообщение об ошибке и возвращается значение 1.
  9. Открывается выходной файл с помощью функции fopen, и если открытие не удалось, выводится сообщение об ошибке и возвращается значение 1.
  10. Начинается цикл while, который будет выполняться до тех пор, пока не будет достигнут конец строки во входном файле.
  11. Внутри цикла while начинается вложенный цикл for, который будет выполняться для каждого символа в текущей строке входного файла.
  12. Внутри вложенного цикла for проверяется, есть ли текущий символ в массиве out_buf. Если символа нет, он добавляется в массив out_buf.
  13. После окончания вложенного цикла for, символ новой строки добавляется в массив out_buf.
  14. Закрывается входной файл с помощью функции fclose.
  15. Закрывается выходной файл с помощью функции fclose.
  16. Возвращается значение 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5