![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
кол-во слов начинающихся и заканчивающихся заданным символом [WinXP]
Lipris © (2006-11-30 16:43:00)как написать программу которая в строке найдет количество слов начинающихся и заканчивающихся заданным символом.
Текст: "Без знаков припинания текст теряет выразительность"
например Заданный символ "т"
Результат работы программы: Кол-во слов начин. и заканчив на "т" равно 2
слова отделены только пробелами (одним или несколькими)
Elen (2006-12-01 09:29:00) [1]
> Снимаю в виду замечания:
Ага я вот тоже с сессией так парюсЪЪ что и лишний раз [6] пишу... Крыша хлопает в ладоши... :)
Думкин (2006-12-01 08:27:00) [2]Снимаю в виду замечания:
> (Может быть на всякий случай надо будет пробелами строку
> входную дополнить на концах)
Правда, студентам помогать текстом - не надо. Декабрь. Сессия.
Думкин (2006-12-01 08:20:00) [3]
> Elen © (01.12.06 07:57) [7]
А если строка заканчивается на 2 пробела? Или начинается не с пробела? Или...
Elen (2006-12-01 07:57:00) [4]
> Lipris
Автор извини [6] не учтен заканчивающийся символ :
Вот так правильнее по сабжу :
procedure TForm1.Edit1Change(Sender: TObject);
var s:string; n,i,a:integer;
begin
s:='Без знаков тприпинаният текст теряет выразительность';
i:=1;n:=0;
while i<=length(s) do begin
if s[i]=' ' then begin a:=i; inc(i);
while (s[i]<>' ')and(i<length(s)) do inc(i);
if (s[i-1]=Edit1.Text)and(s[a+1]=Edit1.Text) then inc(n);
end else inc(i);
end;
caption:=inttostr(n);
end;
(Может быть на всякий случай надо будет пробелами строку входную дополнить на концах)
Elen (2006-12-01 07:46:00) [5]
> Lipris
Могу предложить код пошустрее чем у AndreyRu :
procedure TForm1.Edit1Change(Sender: TObject);
var s:string; n,i:integer;
begin
s:='Без знаков тприпинания текст теряет выразительность';
i:=1;n:=0;
while i<=length(s) do begin
if (i>1)and(s[i-1]=' ')and(copy(s,i,length(edit1.Text))=Edit1.Text) then
inc(n);
inc(i);
end;
caption:=inttostr(n);
end;
В эдит вводится начало слова (первая буква) в капшине твое решенее.
AndreyRu (2006-11-30 21:43:00) [6]Только r : array of string; - Лишнее.. )) Сорри..
AndreyRu (2006-11-30 21:41:00) [7]function RetCount(Ch : Char; Text : String; CaseSens : boolean) : integer;
var
r : array of string;
s, tmp : string;
c : Char;
begin
Result := 0;
s := trim(Text);
if not CaseSens then
begin
s := AnsiUpperCase(s);
c := AnsiUpperCase(Ch)[1];
end;
if pos(' ', s) = 0 then
begin
if (s[1] <> C) or (s[length(s)] <> C) then
exit;
end;
repeat
tmp := copy(s, 1, pos(' ', s)-1);
delete(s, 1, pos(' ', s));
s := trim(s);
if (tmp[1] = C) and (tmp[length(tmp)] = C) then
inc(Result);
until
pos(' ', s) = 0;
if (s[1] = C) or (s[length(s)] = C) then
inc(Result);
end;
tesseract (2006-11-30 16:50:00) [8]for i:=1 to length(mystr) do
begin
if mystr[i]=" " then
//думай сам
end;
Jeer (2006-11-30 16:49:00) [9]
> Lipris © (30.11.06 16:43)
ТЗ поставлено правильно, осталось или написать тебе самому и пожаловаться на какие-либо проблемы в решении этой задачи или определиться с тем, сколько сможешь заплатить за реализацию этого ТЗ на любом языке программирования, поскольку тобой он явно не определен.
Сергей М. (2006-11-30 16:44:00) [10]И ?