![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа со char массивом
programmer90 © (2008-12-02 16:28:00)Здравствуйте увадаемые мастера!
Возникла небольшая проблема
Даны два файла с массивом символов.
Найти первый различный символ в файле.
Например файл1:
a7df3j20fn dws
Файл2
a7df3j20fn1dws
первый различный символ в файле1 находится на позиции (1,11)
(11-ый символ в файле 1 - " " , а в файле 11 символ "1"...)
Плиз объясните подробно насколько это возможно...
Можно на pascal.
Спасибо всем!
Leonid Troyanovsky (2008-12-02 18:51:00) [1]
> programmer90 (02.12.08 18:48) [11]
> ...я не знаю что такое TStream.... вот и немогу его использовать
TFileStream + F1.
--
Regards, LVT.
programmer90 (2008-12-02 18:48:00) [2]
> KilkennyCat © (02.12.08 17:57) [6]
Проклятый рантайм 103....
> Дополнить ее нахождением позиции отличного символа входит
Это понятно...
Параметры функции не смог подставить и это понятно почему....я не знаю что такое TStream.... вот и немогу его использовать
Leonid Troyanovsky (2008-12-02 18:12:00) [3]
> programmer90 (02.12.08 16:28)
> Плиз объясните подробно насколько это возможно...
Специально для двоечников в свое время написал специальную функцию:
function CompareStreams(Stream1, Stream2: TStream): Boolean;
const
BufSize = 4096;
var
StreamSize: Int64;
nb1, nb2: Cardinal;
buf1, buf2: array [0..BufSize-1] of Byte;
begin
StreamSize := Stream1.Size;
Result := StreamSize = Stream2.Size;
if not Result then
Exit;
while (Stream1.Position < StreamSize) do
begin
nb1 := Stream1.Read(buf1, BufSize);
nb2 := Stream2.Read(buf2, BufSize);
if nb1 <> nb2 then
raise EReadError.Create('Compare error');
Result := CompareMem(@buf1, @buf2, nb1);
if not Result then
Exit;
end;
end;
Дополнить ее нахождением позиции отличного символа входит
в домашнее задание.
--
Regards, LVT.
KilkennyCat (2008-12-02 18:07:00) [4]
> clickmaker ©
а потом преподаватель будет пить водку и плакать от счастья, что нашелся и в его толпе гений! :)
clickmaker (2008-12-02 18:03:00) [5]я бы замапил в память... но не весь, а кусок. Если куски одинаковые, то следующий кусок
KilkennyCat (2008-12-02 17:58:00) [6]ошибся, i := 0;
KilkennyCat (2008-12-02 17:57:00) [7]i := 1;
a := true;
while (not eof(f1)) or (not eof(f2)) or (not a) do begin
read(f1, x);
read(f2, y);
a := x = y;
inc(i);
end;
if not a then result := i else один файл закончился раньше (один из файлов - копия куска другого), или оба одинаковые
Правильный$Вася (2008-12-02 17:43:00) [8]strcmp
Slym (2008-12-02 17:41:00) [9]1. Найти первый различный символ в 2 строках...
2. Считать 1 файл в 1 строку, 2 файл во 2 строку...
3. если файлы большие читать по немногу, но в цикле до конца файла
programmer90 (2008-12-02 17:27:00) [10]
> Мастера не увядают!
Да уж...зато я уже увял:)
KilkennyCat (2008-12-02 17:00:00) [11]Мастера не увядают!
stas (2008-12-02 16:31:00) [12]возможно. Например циклом перебрать.