Главная страница
    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
6-1136373049
ingine
2006-01-04 14:10
2006.04.16
TIdFtp


2-1144076653
User_OKA
2006-04-03 19:04
2006.04.16
Последовательность чисел


4-1138718557
Denin
2006-01-31 17:42
2006.04.16
Не могу переместить пользователя из одной группы в другую.


2-1143632624
apic
2006-03-29 15:43
2006.04.16
Уважаемые мастера, ПАМАГИТЕ!!!!!!!!!!!!!


3-1140548087
Варяг
2006-02-21 21:54
2006.04.16
Упаковка ADOTable





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский