Дана строка, состоящая из слов (слова разделяются пробелами). Вывести слова, которые повторяются хотя бы один раз.
Для строк использовать только length, chr, ord.
У меня такая идея: ввести массив, каждый элемент которого соответствует кол-ву встречаемости очередного слова в строке. Но тогда как определять такой массив при описании?
klem4
7.01.2007 20:45
Идешь по строке, выделяешь очередное слово, смотришь нету ли его в массиве слов, если нету, выводишь это слово на экран и добавляешь в массив.
18192123
7.01.2007 21:33
Цитата(klem4 @ 7.01.2007 16:45)
Идешь по строке, выделяешь очередное слово, смотришь нету ли его в массиве слов, если нету, выводишь это слово на экран и добавляешь в массив.
а как быть с размером массива при его описании, я же не знаю, сколько слов будет в строке?
volvo
7.01.2007 21:36
Бери максимально возможное количество: мин. слово - один символ, между словами тоже один разделитель, макс. длина строки в Паскале = 255, так что больше 128 слов в любом случае не будет...
18192123
8.01.2007 0:25
программа в лучшем случае выдаёт первое слово...
uses crt;
function Slovo(s:string;n:integer):string;
const lim =[' ',',','!'];
var ss:string;
k,c,i:integer;
begin
ss:=''; c:=1; k:=1;
while k<=length(s) dobeginwhilenot(s[k] in lim) and (k<=length(s)) dobeginif c=n then ss:=ss+s[k];
inc (k); end;
inc ( c );
while (s[k] in lim) and (k<=length(s)) do inc (k);
end;
Slovo:=ss;
end;
const n=128;
var
a : array[1..n] ofstring;
i, n1, j : integer;
s1, s2 : string;
begin
clrscr;
writeln (' vvedite stroky');
readln (s1);
for j := 1to n do
a[j] := '';
s2 := '';
for j := 1to n dobeginfor i := 1to length (s1) dobegin
a[j] := a[j] + slovo (s1, i);
if a[j] = slovo (s1, i) then s2 := s2 + slovo (s1, i) + ' ';
end;
end;
writeln (' stroka - resultat:');
writeln (s2);
readkey;
end.
volvo
8.01.2007 1:08
А так:
...
s2 := '';
for j := 1to n do a[j] := '';
n1 := 1;
i := 0;
while slovo(s1, n1) <> ''dobegin
found := false;
for j := 1to i doif a[j] = slovo(s1, n1) then found := true;
if found then s2 := s2 + slovo(s1, n1) + ' 'elsebegin
inc(i);
a[i] := slovo(s1, n1);
end;
inc(n1);
end;
...
?
18192123
8.01.2007 1:21
Цитата(volvo @ 7.01.2007 21:08)
А так: .........?
Так всё получается! Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.