Помощь - Поиск - Пользователи - Календарь
Полная версия: слова, повторяющиеся хотя бы раз
Форум «Всё о Паскале» > 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) *

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

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