Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсчет заглавных букв [D7, WinXP]


Shamansky ©   (2005-08-08 17:14:00) 

Мастера подскажите как подсчитать количество заглавных букв в строке?


Anatoly Podgoretsky   (2005-08-09 11:52:00) [1]

for I := 1 to Length(S) do
  if IsCharUpper(S[I]) then Count := Count + 1;


Amoeba   (2005-08-09 11:10:00) [2]

Правильное решение дано в Ega23 ©   (08.08.05 17:24) [1]


begin...end   (2005-08-08 18:36:00) [3]

> Poirot ©   (08.08.05 18:27) [11]

GetTickCount -- тоже нормально, если число итераций цикла увеличить. Ещё лучше -- QueryPerformanceCounter. В обоих случаях желательно повысить приоритет текущего потока (GetCurrentThread -> SetThreadPriority).


Poirot   (2005-08-08 18:27:00) [4]

Есть замечательная тулза time гнусная помоему вот с ней и запусти:) малентький и шустрый , а потом статистическими методами на основе выборки из 1000 испытаний проверь что быстрее:) а проще посчитай количество инструкций для процессора в каждом из случаев:)


Kolan   (2005-08-08 18:21:00) [5]

Угу понял.

А так.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 S: string;
 I: Integer;
 Count: Integer;
 Tick: Longint;
begin
 S := Edit1.Text;
 Count := 0;
 Tick := GetTickCount;
 for I := 1 to Length(S) do
   if S[I] in (['А'..'Я', 'Ё']) then
     Count := Count + 1;
 Tick := GetTickCount - Tick;
 Edit2.Text := IntToStr(Count) + ' ' + IntToStr(Tick);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
 S: string;
 I: Integer;
 Count: Integer;
 Tick: Longint;
begin
 S := Edit1.Text;
 Count := 0;
 Tick := GetTickCount;
 for I := 1 to Length(S) do
   if ((Ord(S[I]) >= 192) and (Ord(S[I]) <= 222)) or (Ord(S[I]) = 168) then
     Count := Count + 1;
 Tick := GetTickCount - Tick;
 Edit2.Text := IntToStr(Count) + ' ' + IntToStr(Tick);
end;


Ega23   (2005-08-08 18:16:00) [6]

Точно! Не 'Я', а 'Ё'. С 'Ё' какие-то проблемы.


Fay   (2005-08-08 18:07:00) [7]

2 Kolan ©   (08.08.05 18:00) [5]
Проверь с "Ну Ё-МОЁ!"


Kolan   (2005-08-08 18:05:00) [8]

Кстати а как бы скорость замерить.


> Про язык речи не шло, не так-ли?

Так так


> И потом, что-то я не уверен про 'Я'.

А что тут может быть(интересно...) :)


Kolan   (2005-08-08 18:00:00) [9]

В Edit.Text
Почему Же Нет?
var
 S: string;
 I: Integer;
 Count: Integer;
 Tick: Longint;
begin
 S := Edit1.Text;
 Count := 0;
 Tick := GetTickCount;
 for I := 1 to Length(S) do
   if S[I] in ['À'..'ß'] then
     Count := Count + 1;
 Tick := GetTickCount - Tick;
 Edit2.Text := IntToStr(Count) + ' ' + IntToStr(Tick);
end;


Ответ:
3 0


Ega23   (2005-08-08 18:00:00) [10]

2 Kolan ©   (08.08.05 17:40) [3]

Про язык речи не шло, не так-ли?
И потом, что-то я не уверен про 'Я'.


Fay   (2005-08-08 17:53:00) [11]

Kolan ©   (08.08.05 17:40) [3]
>> S[I] in ['А'..'Я']
Нет.


Kolan   (2005-08-08 17:40:00) [12]

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 S: string;
 I: Integer;
 Count: Integer;
begin
 Count := 0;
 S := Edit1.Text;
 for I := 1 to Length(S) do
   if S[I] in ['A'..'Z'] then
     Count := Count + 1;
 ShowMessage(IntToStr(Count));
end;


Если русские то множество надо заменить на множество русских букв.
S[I] in ['А'..'Я']


Shamansky   (2005-08-08 17:33:00) [13]

Спасибо


Ega23   (2005-08-08 17:24:00) [14]


function MyFunc(aStr:String):Integer;
var
i:Integer;
ss:string;
begin
Result:=0;
ss:=ANSIUpperCase(aStr);
for i:=1 to Length(aStr) do
 if aStr[i]=ss[i] then Result:=Result+1;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо