Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Чтение длинны строки из файла


Автор: R4peMe 21.2.2011, 13:32
Помогите пожалуйста написать программу на C, которая в текстовом файле находит самое длинное предложение и выводит его длину в символах и порядковый номер.

в частности интересует чисто алгоритм считывания т.к. я со строками не дружу =\
допустим

Цитата

FILE *ff;
...
fopen("text.txt","r");

я думаю, что удобнее всего делать через while 
может я не прав
заранее спасибо

Автор: hawk3500 21.2.2011, 20:08
Эта задача сроди обработки HDLC но проще.
Сделайте CreateFile, CreateFileMapping,MapViewOfFile и дальше работайте с файлом как с массивом в памяти.
Дальше всё просто.

Начинайте читать по файлам до тех пор пока не найдёте точку-конец предложения.

Код
char *FILE;
DWORD FileSize;
HANDLE hFile;
HANDLE hFileMapping;
int START_BYTE=0;

int CountNumber=0;
int lenght=0;
int Maxlenght=0;
int tmp=0;
int tmp2=0;

hFile = CreaTeFile(pszFileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
hFileMapping = CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL);
FILE = (char *) MapViewOfFile(hFileMapping, FILE_MAP_COPY, 0, 0, 0);
FileSize=GetFileSize(hFile,0);

while(START_BYTE<FileSize)
{
   if(FILE[START_BYTE]=='.')
   {
      tmp++;
      lenght=START_BYTE-tmp2;//длинна предложения.
      if(lenght>Maxlenght)
      {
          Maxlenght=lenght;
         CountNumber=tmp;
       } 
       START_BYTE++;
       tmp2=START_BYTE;
    }
}



Ну вот как то так.


Модератор: не забываем пользоваться кнопочкой "Код"

Автор: bsa 22.2.2011, 00:33
R4peMe, ни в коем случае не слушай hawk3500. Именно такие люди оказывают медвежьи услуги.

С помощью fgetc читаешь файл посимвольно. Когда встречаешь точку/вопросительный/восклицательный знак, то считаешь, что обнаружен конец предложения, иначе увеличиваешь счетчик символов на 1. Если обнаружен конец предложения, то сравниваешь количество символов с максимально обнаруженным до этого. Если больше, то присваиваешь максимальному текущее, и положению максимального предложения текущее. Текущему положению предложения присваиваешь текущую позицию в файле (ftell).

hawk3500, я рад, что ты знаешь WinAPI. Но это не повод показывать эту порнографию новичкам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)