![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сколько раз встречается каждое слово в предложении! [D7, XP]
Dyakon_Frost © (2006-04-04 12:04:00)Здравствуйте!
Мне необходимо написать программу подсчитывающую сколько раз встречается каждое слово в строке?
Например:
"Это пробное предложение! Пробное!"
"Это - 1
пробное - 2
предложение - 1"
Заранее спасибо.
Dyakon_Frost (2006-04-04 16:11:00) [1]Спасибо! А на счет моего кода - там просто надо кое-что было подправить, просто торопился!
Zeqfreed (2006-04-04 14:26:00) [2]Ясно :)
Palladin (2006-04-04 14:24:00) [3]проще, но это я выдрал из своего архива 6 летней давности... оно мне надо? чего то править :)
Zeqfreed (2006-04-04 14:20:00) [4][9] Palladin © (04.04.06 12:32)
> Letters = [
> 'q','w','e','r','t','y','u','i','o','p',
> 'a','s','d','f','g','h','j','k','l','z',
> 'x','c','v','b','n','m','Q','W','E','R',
> 'T','Y','U','I','O','P','A','S','D','F',
> 'G','H','J','K','L','Z','X','C','V','B',
> 'N','M','й','ц','у','к','е','н','г','ш',
> 'щ','з','х','ъ','ф','ы','в','а','п','р',
> 'о','л','д','ж','э','я','ч','с','м','и',
> 'т','ь','б','ю','Й','У','К','Е','Н','Г',
> 'Ш','Щ','З','Х','Ъ','Ф','Ы','В','А','П',
> 'Р','О','Л','Д','Ж','Э','Я','Ч','С','М',
> 'И','Т','Ь','Б'];
А разве не проще написать
Letters = ['A'..'Z'] + ['a'..'z'] + ['а..я'] + ['А'..'Я']
?
Ну а Nums, соответственно —['0'..'9']
Palladin (2006-04-04 12:35:00) [5]
> Dyakon_Frost © (04.04.06 12:26) [8]
угу, если бы все у меня в офисе так проблемы решали, стояли бы в углу до второго пришествия, во первых она даже не откомпилируется, во вторых не правильно разбирает предложения
Palladin (2006-04-04 12:32:00) [6]
Const
Nums = ['0','1','2','3','4','5','6','7','8','9'];
Letters = [
'q','w','e','r','t','y','u','i','o','p',
'a','s','d','f','g','h','j','k','l','z',
'x','c','v','b','n','m','Q','W','E','R',
'T','Y','U','I','O','P','A','S','D','F',
'G','H','J','K','L','Z','X','C','V','B',
'N','M','й','ц','у','к','е','н','г','ш',
'щ','з','х','ъ','ф','ы','в','а','п','р',
'о','л','д','ж','э','я','ч','с','м','и',
'т','ь','б','ю','Й','У','К','Е','Н','Г',
'Ш','Щ','З','Х','Ъ','Ф','Ы','В','А','П',
'Р','О','Л','Д','Ж','Э','Я','Ч','С','М',
'И','Т','Ь','Б'];
NumsAndLetters = Nums + Letters;
WordChars = NumsAndLetters+['-'];
Procedure ParseWords(const s:String;p_nMinWordLength:Integer);
Var
c,r:String;
cn,l,n,k:Integer;
wrds:TStringList;
Function _ReadWord:Boolean;
Label m;
Begin
m: Result:=False; c:='';
If n>(l+1) Then Exit;
While True Do
Begin
If s[n] In WordChars Then Break;
If n=l Then Break;
Inc(n);
End;
c:=s[n]; Inc(n);
While True Do
Begin
If s[n] In WordChars Then c:=c+s[n] Else Break;
If n=l Then Break;
Inc(n);
End;
If Length(c)<=p_nMinWordLength Then GoTo m Else Result:=True;
End;
Begin
If Trim(s)='' Then Exit;
wrds:=TStringList.Create;
wrds.Sorted:=True;
l:=Length(s); n:=1;
While _ReadWord Do If c<>'' Then
Begin
r:=AnsiLowerCase(c);
k:=wrds.IndexOf(r);
If k=-1 Then wrds.AddObject(r,TObject(0)) Else wrds.Objects[k]:=TObject(Integer(wrds.Objects[k])+1);
End;
Form1.Memo2.Lines.Add('Строка "'+s+'"');
For k:=0 to wrds.Count-1 Do
Form1.Memo2.Lines.Add(' Количество слов "'+wrds[k]+'":'+IntToStr(Integer(wrds.Objects[k])+1));
Application.ProcessMessages;
wrds.Free;
End;
procedure TForm1.sButton1Click(Sender: TObject);
Var
i:Integer;
begin
For i:=0 to Memo1.Lines.Count-1 Do ParseWords(Memo1.Lines[i],2);
end;
и будет тебе счасте... если разберешся конечно...
Dyakon_Frost (2006-04-04 12:26:00) [7]Всем спасибо проблема решена:
procedure Slova(str:TEdit;M:TMemo);
var s,w:string;
k,i,wc:byte;
begin
str.Text:=str.Text+' ';
k:=Pos(' ',str.Text);
while (k>0) do
begin
w:=copy(str.Text,1,k-1);
s:=copy(str.Text,k+1,255);
i:=Pos(' '+w+' ',' '+str.Text);
wc:=1;
while (i>0) do
begin
inc(wc);
str.Text:=copy(str.Text,1,i-1)+copy(str.Text,i+length(w)+1,255);
i:=Pos(' '+w+' ',' '+str.Text);
end;
M.Lines.add := 'слово: ''' + w + ''' встречается ' + inttostr(wc) + ' раз';
k:=Pos(' ',str.Text);
end;
end;
Bless (2006-04-04 12:15:00) [8]to Dyakon_Frost>
Приведи свой код для одного пробела, если не трудно.
Плохиш (2006-04-04 12:14:00) [9]
> Dyakon_Frost © (04.04.06 12:11) [3]
> Проблема в том, что пробелов между словами может быть много!
И в чём проблема? Надо просто усвоить, что пробел - это не слово и считать их не надо.
Dyakon_Frost (2006-04-04 12:14:00) [10]и это тоже, хотя не такая большая проблема как пробелы
vovnuke (2006-04-04 12:13:00) [11]между словами могут быть еще и не пробелы, так что ...
Dyakon_Frost (2006-04-04 12:11:00) [12]Проблема в том, что пробелов между словами может быть много! И я немогу что-то представить себе алгоритм избавления от этой проблемы!
Bless (2006-04-04 12:10:00) [13]Судя по
Заранее спасибо.
затруднений нет :)
Ega23 (2006-04-04 12:07:00) [14]Ну и в чём затруднение?