Форум: Форум C++Разное
Новые темы: 00
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Посчитаен предложения в текстовом файле
 
 автор: dimdln   (25.06.2007 в 22:17)   письмо автору
 
 

Функция считает количество строк в файле.
Как бы ее слегка подправить, чтобы она считала
количество предложений ( в конце . или ? или !) в файле
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
using namespace std;

int number_string(char *fileIn);

int main() {
char *fileIn = "D:\\MyLib\\mozg.txt";
const int NUMBER_LINE = number_string(fileIn);
cout << "Число строк в файле: "<< NUMBER_LINE << endl;
return 0;
}

// Функция подсчета количества строк в файле
int number_string(char *fileIn)
{
FILE *fp;
fp = fopen (fileIn,"r"); // Откыть файл
if (fp==NULL) {cout << "невозмжно открыть файл"
<< ferror(fp) << endl; return -1;}
const int LENGTH =10000;
int count = 0;
char str [LENGTH];

//Считываем строки из файла и считаем их
while (!feof(fp)) {
fgets (str, LENGTH,fp);
count++;
}
fclose (fp); // Не забыть бы закрыть файл
return count;
}

  Ответить  
 
 автор: alex19921992   (26.06.2007 в 06:47)   письмо автору
 
   для: dimdln   (25.06.2007 в 22:17)
 

все очень просто! тебе надо считывать файл посимвольно функцией
char ch;
fscanf(file,"%c",&ch);
и попутно записывая это в строчку s:
char s1[2];s1[0]=ch;s1[1]=0;
strcat(s,s1);
если ch равно ? или ! или . или \0
то предложение прочитано!
итого:

charRead1PredlozenieFromFile(FILE*file)
{
  char s[1000];s[0]=0;
  char ch=1;
  while(ch!=0 && ch!='!' && ch!='?' && ch='.')
  {
    fscanf(file,"%c",&ch);
    char s1[2];s1[0]=ch;s1[1]=0;
    strcat(s,s1);
  }
return s;
}

эта функция читает 1 предложение из файла.

  Ответить  
 
 автор: dimdln   (27.06.2007 в 21:46)   письмо автору
 
   для: alex19921992   (26.06.2007 в 06:47)
 

Спасибо, Alex! Поплавская тоже помогла. В результате родилось такое решение.
Теперь предложение надо поместить в структуру (какую - пока не знаю) и
попроботать написать программу анализа предложения

// sentences.cpp Программа считывает в буфер текстовый файл,
// находит признак конца предложения и выводит предложение куда
// хотите (в файл, на экран, в структуру и т.д.)
// Microsoft visual c++ Express 2005 Edition

#include <stdafx.h>
#include <stdio.h>
#include <fstream>
#include <iostream>

using namespace std;

int main() {
ifstream fin("D:\\MyLib\\mozgtest.txt",ios::in) ;

if (!fin) {cout << "невозмжно открыть файл"
<< endl; return -1;}
fin.seekg(0,ios::end); //перемещение текущей позиции в

конец
long len = fin.tellg(); // определение длины АЙЛА
char* buf =new char[len+1]; // выделяет len+1 байтов под буфер

buf
fin.seekg(0,ios::beg); //перемещение текущей позиции снова в

начало
fin.read(buf,len); // считывает файл в буфер
buf[len] ='\0'; // нуль-символ - признак конца

масива
//-------------

int n=0, i=0,j=0;
int count =0; // количество предложений в

тексте
while(buf[i]) { //читает буфкр до тех пор, пока

не встретит \0
if(buf[i] == '.' || buf[i]=='?' || buf[1] == '!'){
for(j==n; j<=i; ++j) // ОБЯЗАТЕЛЬНО ==, иначе не

работает
cout << buf[j] ; cout << endl;
count++;
}
n = i+1;
i++;
}
cout << "Всего предложений в файле " << count << endl;
fin.close();
return 0;
}
//21:32 27.06.2007 dimdln

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования