Помощь - Поиск - Пользователи - Календарь
Полная версия: слова, повторяющиеся хотя бы раз
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
18192123
Дана строка, состоящая из слов (слова разделяются пробелами). Вывести слова, которые повторяются хотя бы один раз.

Для строк использовать только length, chr, ord.

У меня такая идея: ввести массив, каждый элемент которого соответствует кол-ву встречаемости очередного слова в строке. Но тогда как определять такой массив при описании?
klem4
Идешь по строке, выделяешь очередное слово, смотришь нету ли его в массиве слов, если нету, выводишь это слово на экран и добавляешь в массив.
18192123
Цитата(klem4 @ 7.01.2007 16:45) *

Идешь по строке, выделяешь очередное слово, смотришь нету ли его в массиве слов, если нету, выводишь это слово на экран и добавляешь в массив.

а как быть с размером массива при его описании, я же не знаю, сколько слов будет в строке?
volvo
Бери максимально возможное количество: мин. слово - один символ, между словами тоже один разделитель, макс. длина строки в Паскале = 255, так что больше 128 слов в любом случае не будет...
18192123
программа в лучшем случае выдаёт первое слово...

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
А так:
...
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
Цитата(volvo @ 7.01.2007 21:08) *

А так:
.........?

Так всё получается! Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.