Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Подсчет заглавных букв   Найти похожие ветки 

 
Shamansky   (2005-08-08 17:14) [0]

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


 
Ega23 ©   (2005-08-08 17:24) [1]


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;


 
Shamansky   (2005-08-08 17:33) [2]

Спасибо


 
Kolan ©   (2005-08-08 17:40) [3]

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 ["А".."Я"]


 
Fay ©   (2005-08-08 17:53) [4]

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


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

В 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) [6]

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

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


 
Kolan ©   (2005-08-08 18:05) [7]

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


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

Так так


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

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


 
Fay ©   (2005-08-08 18:07) [8]

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


 
Ega23 ©   (2005-08-08 18:16) [9]

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


 
Kolan ©   (2005-08-08 18:21) [10]

Угу понял.

А так.
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;


 
Poirot ©   (2005-08-08 18:27) [11]

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


 
begin...end ©   (2005-08-08 18:36) [12]

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

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


 
Amoeba ©   (2005-08-09 11:10) [13]

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


 
Anatoly Podgoretsky ©   (2005-08-09 11:52) [14]

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



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
14-1124332389
Думкин
2005-08-18 06:33
2005.09.11
18 августа. С днем рождения!


1-1124358762
PalPalych
2005-08-18 13:52
2005.09.11
I/O error 123


9-1116409473
Buzzz
2005-05-18 13:44
2005.09.11
Земля в ГЛС


3-1122888728
erika
2005-08-01 13:32
2005.09.11
Объединение запросов


1-1124255584
AlexBo
2005-08-17 09:13
2005.09.11
Вызов ODBC