![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсчет заглавных букв [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;