Не понимаю, как осуществить ету самую длинную строку....
В текстовый файл занесена строка длиной более 255 символов (в строке мо-жет быть только одно слово). Вывести на экран строку, удалив повторяющие «лишние» пробелы (если они есть), и удалить все последующие вхождения первой буквы в каждом слове.
Tan
7.04.2007 16:00
Используй указатели если вы проходили.
volvo
7.04.2007 16:18
Цитата
Используй указатели
Указатель на что?
Лучше всего пройти по строке посимвольно (используя комбинацию eoln(f) и eof(f) как признак того, что текущая строка закончена), и каждый символ проверяя на предмет заданных тобой ограничений...
Tan
7.04.2007 16:22
type base = ^MyRec MyRec = record data : array[1..N] of char; num : integer; end;
Ну то есть указатеть на символ и на его номер на всякий случай. Сначала считываем всё с файла в вышеописанную структуру. После этого пробегаем по указателям на символ если нет лишнего пробела пишем в файл если есть удаляем идём к следующему символу. Ну и с вхождениями проблем не должно быть по идее.
мисс_граффити
7.04.2007 16:25
а в файле есть строки, кроме этой длинной? то есть ее надо просто распечатать или же сначала найти?
volvo
7.04.2007 16:42
Цитата
Сначала считываем всё с файла в вышеописанную структуру.
Да? Все, что тебе удастся считать - это один символ...
Если у тебя массив этих структур (или список) - то это называется избыточность: на один байт обрабатываемых данных ты имеешь в 2 раза больше сопроводительной информации.
Tan
7.04.2007 16:49
нащёт избыточности : ну да так и есть, но в таком задании наврядли надо так строго подходить а по поводу структуры, пардон array [1..N] of char вместо просто char.
klem4
7.04.2007 17:03
Цитата
ну да так и есть, но в таком задании наврядли надо так строго подходить а по поводу структуры
Кто тебе это сказал ? Ну давай туда еще всякой белиберды запихнем, в каком регистре этот символ, его код еще отдельно сохраним...
Tan
7.04.2007 17:31
Нет, ну если бы автор упомянул что ему нужен какой - то определённый вариант решения, я согласен тогда можно бы было корректировать, а если ничего не сказано, значит приветвуются все, я просто предложил решение в моём понимание, никто не оспаривает, что оно не является лучшим, каждый по своему это воспринимает, возможно оно приглянётся автору вопроса. В любом случае огромное спасибо за ваши комментарии.
klem4
7.04.2007 19:58
Ну вот посмотри, тут не вся программа, процедура формирует файл из одной очень длинной строки (можно можно сформировать сколько угодно таких строк), далее начинается обработка, читается строка из файла, если её длина > 255, то из нее удаляются пробелмы в начале и в конце.
uses crt;
const max_str_len = 1000;
function long_read(var f: Text): PChar; var P: PChar; i: Word; ch: Char; begin P := nil; if not(eof(f)) then begin i := 0; GetMem(P, max_str_len * sizeof(char)); while not(eoln(f)) do begin read(f, ch); P[i] := ch; inc(i); end; readln(f); end; if P <> nil then long_read := P else long_read := ''; end;
function long_del_space(P: PChar): PChar; var i, j, back: Word; temp: PChar; begin i := 0; while (i < Length(P)) and (P[i] = ' ') do inc(i); if (i < Length(P)) then begin back := i; while (i < Length(P)) and (P[i] <> ' ') do inc(i); GetMem(temp, (i - back) * sizeof(Char)); for j := back to i - 1 do temp[j - back] := P[j]; long_del_space := temp; end else long_del_space := ''; end;
procedure CreateTestFile(var f: Text); var i: Integer; begin rewrite(f); for i := 1 to 50 do write(f, ' '); // 50 пробелов for i := 100 to 200 do write(f, i); // числа от 100 до 200 (100101102...199200) for i := 97 to 122 do write(f, char(i)); // алфавит for i := 1 to 20 do write(f, ' '); // 20 пробелов writeln(f); end;
var f: Text; P: PChar;
begin clrscr; assign(f, 'text.txt'); CreateTestFile(f);
reset(f); while not(eof(f)) do begin P := long_read(f); write('->', P, '<-'); writeln; writeln; if Length(P) > 255 then P := long_del_space(P); write('->', P, '<-'); writeln; writeln; end;
close(f); readln; end.
Vania
8.04.2007 2:08
Любые решения принимаются! Премного благодарю всех всех всех!! Вы мне очень помогли!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.