Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Сколько раз встречается каждое слово в предложении!   Найти похожие ветки 

 
Dyakon_Frost ©   (2006-04-04 12:04) [0]

Здравствуйте!

Мне необходимо написать программу подсчитывающую сколько раз встречается каждое слово в строке?
Например:
"Это пробное предложение! Пробное!"
"Это - 1
пробное - 2
предложение - 1"

Заранее спасибо.


 
Ega23 ©   (2006-04-04 12:07) [1]

Ну и в чём затруднение?


 
Bless ©   (2006-04-04 12:10) [2]

Судя по
Заранее спасибо.
затруднений нет :)


 
Dyakon_Frost ©   (2006-04-04 12:11) [3]

Проблема в том, что пробелов между словами может быть много! И я немогу что-то представить себе алгоритм избавления от этой проблемы!


 
vovnuke ©   (2006-04-04 12:13) [4]

между словами могут быть еще и не пробелы, так что ...


 
Плохиш ©   (2006-04-04 12:14) [5]


> Dyakon_Frost ©   (04.04.06 12:11) [3]
> Проблема в том, что пробелов между словами может быть много!

И в чём проблема? Надо просто усвоить, что пробел - это не слово и считать их не надо.


 
Dyakon_Frost ©   (2006-04-04 12:14) [6]

и это тоже, хотя не такая большая проблема как пробелы


 
Bless ©   (2006-04-04 12:15) [7]

to Dyakon_Frost>

Приведи свой код для одного пробела, если не трудно.


 
Dyakon_Frost ©   (2006-04-04 12:26) [8]

Всем спасибо проблема решена:


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;


 
Palladin ©   (2006-04-04 12:32) [9]


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;


и будет тебе счасте... если разберешся конечно...


 
Palladin ©   (2006-04-04 12:35) [10]


> Dyakon_Frost ©   (04.04.06 12:26) [8]


угу, если бы все у меня в офисе так проблемы решали, стояли бы в углу до второго пришествия, во первых она даже не откомпилируется, во вторых не правильно разбирает предложения


 
Zeqfreed ©   (2006-04-04 14:20) [11]

[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 14:24) [12]

проще, но это я выдрал из своего архива 6 летней давности... оно мне надо? чего то править :)


 
Zeqfreed ©   (2006-04-04 14:26) [13]

Ясно :)


 
Dyakon_Frost ©   (2006-04-04 16:11) [14]

Спасибо! А на счет моего кода - там просто надо кое-что было подправить, просто торопился!



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.062 c
4-1138054795
DenXi
2006-01-24 01:19
2006.04.16
Сервис на WinAPI


2-1143624495
pkm
2006-03-29 13:28
2006.04.16
Просмотр фалов в папке.


2-1143635200
jenya_rus
2006-03-29 16:26
2006.04.16
Rename...


3-1140256083
Kot_
2006-02-18 12:48
2006.04.16
Order by по символьному полю


5-1129377067
gde11
2005-10-15 15:51
2006.04.16
Не показываются в Instectore свойства внутреннего компонента.