Работа с текстовым файлом на Си - 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; }
Объяснение кода листинга программы
- В начале кода объявлены несколько функций и переменных, а также включены необходимые заголовочные файлы.
END
объявлен как константный указатель, который содержит символы, обозначающие конец предложения.- Функция
has_comma
проверяет наличие запятой в предложении. - Функция
is_end
проверяет, является ли символ одним из символов, обозначающих конец предложения. - Функция
get_sentence
считывает предложение из файла в буфер. - В функции
main
создается буферbuf
для хранения считанного предложения и открывается файлtext.txt
для чтения. - Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается.
- В цикле
while
вызывается функцияget_sentence
, и если предложение не содержит запятой, оно выводится на экран. - Если достигается конец файла, программа завершается.
- Если в предложении заканчивается место в буфере, программа выводит сообщение об ошибке и завершается.
- Если в предложении встречается один из символов конца предложения, программа завершается.
- Если в предложении встречается символ конца файла, он добавляется в буфер и программа завершается.
- В конце буфера добавляется нулевой символ, обозначающий конец строки.
- Функция
get_sentence
возвращает1
, если предложение было полностью считано, и0
, если достигнут конец файла или закончилось место в буфере. - Если достигается конец файла или заканчивается место в буфере во время чтения предложения, программа выводит сообщение об ошибке и завершается.
- Если в предложении встречается символ конца файла, он добавляется в буфер и программа завершается.
- В конце буфера добавляется нулевой символ, обозначающий конец строки.
- В функции
main
открывается файлtext.txt
для чтения. - Если файл не может быть открыт, программа выводит сообщение об ошибке и завершается.
- Если достигается конец файла, программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д