Задача:
/В каждом из слов текстового файла замените последнюю букву звёздочкой/
1)Как сделать так,чтобы прога подсчитывала кол-во символов в слове?
М | А чего медлить-то ... я просто знаю все ссылки наизусть ... ну это шутка конечно klem4 |
uses crt;
const
limits = [#0..#32,'.',',',':',';','!','?','"'];
type
TWords = array[1..40] of string;
var
txt : string;
words : TWords;
f : text;
function GetWords(s : string; var w : TWords; n : byte) : byte;
var
i,back : byte;
begin
i := 1;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] in limits) do
inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and not(s[i] in limits) do
inc(i);
inc(n);
w[n] := copy(s, back, i-back);
end;
end;
GetWords := n;
end;
var
size : byte;
i : byte;
begin
clrscr;
assign(f, 'c:\test.txt');
reset(f);
size := 0;
while not(eof(f)) do begin
readln(f, txt);
size := GetWords(txt, words, size);
end;
for i := 1 to size do writeln(words[i]);
close(f);
readln
end.
const
delimiter = [#32, ',', '.', '!', ':'];
type
wrd_info = record
start, len: byte;
end;
function get_words(s: string;
var words: array of wrd_info): integer;
var
count: integer;
i, curr_len: byte;
begin
count := -1; i := 1;
while i <= length(s) do begin
while (s[i] in delimiter) and (i <= length(s)) do inc(i);
curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;
if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;
end;
get_words := count + 1;
end;
const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
s: string;
i, n: integer;
f: text;
begin
assign(f, 'text.txt');
reset(f);
while not seekeof(f) do begin
readln(f, s);
n := get_words(s, words);
for i := 1 to n do
s[ words[i].start + words[i].len - 1 ] := '*';
writeln(s); { Можно записать в другой файл ... }
end;
close(f)
end.
var
count: integer;