Форум: "Начинающим";
Текущий архив: 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.04 c