Работа с текстовым файлом на Си - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых. Помогите, есть такая версия программы но на Си++
 
 #include <fstream.h>
#include <conio.h>

void main()
{
 clrscr();
 char ch = ',';
 char b[250]="\0";
 char a[250]="\0";
ifstream out ("D:\\read.txt");
  while (!out.eof())
   {
     out.getline(b, sizeof(b));
     for (int i=0; i<=sizeof(b)/4; i++)
        {
           if (ch!=b[i]) {a[i] = b[i];}
           else
            {
              for (int j=0; j<=250; j++) {a[j]='\0';}
              cout<<"Stroka: Imeet zapajtie!!!";
              break;
              }
           }
cout<<a<<endl;
}
out.close();
getch();
 
}
А надо без этих библиотек и на чистом си Заранее благодарю

Решение задачи: «Работа с текстовым файлом на Си»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
const char* END = ".!?\n";
 
int has_comma(const char* str) ;
int is_end(int c, const char* marks);
int get_sentence(char *buf, size_t bufsiz, FILE *stream);
 
int main(void)
{
    char buf[BUFSIZ];
    const char* filepath = "text.txt";
 
    FILE *file = fopen(filepath, "r");
 
    if (file == NULL) {
        printf("Can't open %s\n", filepath);      
        return -1;
    }
    while (get_sentence(buf, BUFSIZ, file))
        if (!has_comma(buf)) printf("%s\n", buf);
 
    return 0;
}
int has_comma(const char* str) 
{
    return (int)strchr(str, ','); // есть ли запятая в предложении
}
int is_end(int c, const char* marks) 
{
    return (int)strchr(marks, c); // проверяет символ на равенство .!? 
}
 
int get_sentence(char *buf, size_t bufsiz, FILE *stream) //считываем предложение
{
    if (feof(stream)) // если конец файла
        return 0;
    int c = 0;
    while (isspace(c = fgetc(stream))) // пропускаем пробелы между предложениями
        ;  
    int i = 0;
    // в пред. while мы считали первый непробел
    while (!is_end(c, END) && c != EOF) {    //выполняем пока не вcтретим знак из END или конец файла                             
        if (i >= bufsiz) { 
            printf("Need more space =)\n");
            return 0;
        }
        buf[i++] = (char)c; // добавляем символ в буфер
        c = fgetc(stream);  // читаем символ из файла      
    }
    if (c != EOF) buf[i++] = (char)c;  // добавляем знак в буфер(.!?)
    buf[i] = '\0';       // добавляем нультерминал
    return 1;
}

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

  1. В начале кода объявлены несколько функций и переменных, а также включены необходимые заголовочные файлы.
  2. END объявлен как константный указатель, который содержит символы, обозначающие конец предложения.
  3. Функция has_comma проверяет наличие запятой в предложении.
  4. Функция is_end проверяет, является ли символ одним из символов, обозначающих конец предложения.
  5. Функция get_sentence считывает предложение из файла в буфер.
  6. В функции main создается буфер buf для хранения считанного предложения и открывается файл text.txt для чтения.
  7. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается.
  8. В цикле while вызывается функция get_sentence, и если предложение не содержит запятой, оно выводится на экран.
  9. Если достигается конец файла, программа завершается.
  10. Если в предложении заканчивается место в буфере, программа выводит сообщение об ошибке и завершается.
  11. Если в предложении встречается один из символов конца предложения, программа завершается.
  12. Если в предложении встречается символ конца файла, он добавляется в буфер и программа завершается.
  13. В конце буфера добавляется нулевой символ, обозначающий конец строки.
  14. Функция get_sentence возвращает 1, если предложение было полностью считано, и 0, если достигнут конец файла или закончилось место в буфере.
  15. Если достигается конец файла или заканчивается место в буфере во время чтения предложения, программа выводит сообщение об ошибке и завершается.
  16. Если в предложении встречается символ конца файла, он добавляется в буфер и программа завершается.
  17. В конце буфера добавляется нулевой символ, обозначающий конец строки.
  18. В функции main открывается файл text.txt для чтения.
  19. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается.
  20. Если достигается конец файла, программа завершается.

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы