Дана строка, состоящая из слов (слова разделяются пробелами). Вывести слова, которые повторяются хотя бы один раз.
Для строк использовать только length, chr, ord.
У меня такая идея: ввести массив, каждый элемент которого соответствует кол-ву встречаемости очередного слова в строке. Но тогда как определять такой массив при описании?
klem4
7.01.2007 16:45
Идешь по строке, выделяешь очередное слово, смотришь нету ли его в массиве слов, если нету, выводишь это слово на экран и добавляешь в массив.
18192123
7.01.2007 17:33
Цитата(klem4 @ 7.01.2007 16:45)
Идешь по строке, выделяешь очередное слово, смотришь нету ли его в массиве слов, если нету, выводишь это слово на экран и добавляешь в массив.
а как быть с размером массива при его описании, я же не знаю, сколько слов будет в строке?
volvo
7.01.2007 17:36
Бери максимально возможное количество: мин. слово - один символ, между словами тоже один разделитель, макс. длина строки в Паскале = 255, так что больше 128 слов в любом случае не будет...
18192123
7.01.2007 20: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) do begin while not(s[k] in lim) and (k<=length(s)) do begin if 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] of string; i, n1, j : integer; s1, s2 : string;
begin clrscr; writeln (' vvedite stroky'); readln (s1); for j := 1 to n do a[j] := ''; s2 := ''; for j := 1 to n do begin for i := 1 to length (s1) do begin 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
7.01.2007 21:08
А так:
... s2 := ''; for j := 1 to n do a[j] := '';
n1 := 1; i := 0; while slovo(s1, n1) <> '' do begin found := false; for j := 1 to i do if a[j] = slovo(s1, n1) then found := true;
if found then s2 := s2 + slovo(s1, n1) + ' ' else begin inc(i); a[i] := slovo(s1, n1); end; inc(n1); end; ...
?
18192123
7.01.2007 21:21
Цитата(volvo @ 7.01.2007 21:08)
А так: .........?
Так всё получается! Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.