Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.038 c
1-1141998060
MixAnOL
2006-03-10 16:41
2006.04.16
DoubleBuffered:=true


2-1143713097
Yegorchic
2006-03-30 14:04
2006.04.16
CheckBox.Caption в 2 строки


3-1140346654
mif-e
2006-02-19 13:57
2006.04.16
Как делокализовать БД?


2-1144232434
Std
2006-04-05 14:20
2006.04.16
РАбота с несколькими формами


15-1143125776
ZeFiR
2006-03-23 17:56
2006.04.16
Преобразование картинки в ASCII символы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский