Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2013, 14:44   #11
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Русские тоже считает.
Только Вам нужно брать не
Код:
ArrCount: array[0..255] of Integer;
а
Код:
ArrCount: array[0..65535] of Integer;
Ну и где выводите цикл нужно подправить.
ааа.... т.е я выбрал маленький диапазон , только для английских символов?
viks1 вне форума Ответить с цитированием
Старый 31.03.2013, 14:45   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ss - динамический массив встреченных символов
сс - динамический массив счетчиков
Изначально пустые
По индексам соответствуют друг другу
Ищу символ в массивеб если не нахожу - увеличиваю размерность и добавляю символ
В счетчике накапливаю кол-во повторений
Все
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.03.2013, 14:53   #13
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
ааа.... т.е я выбрал маленький диапазон , только для английских символов?
Не совсем так.
Для латиницы достаточно от 32 до 127.
А если нужна кириллица, то нужно понимать, какую именно кодировку Вы хотите использовать.
Если любую однобайтовую, то достаточен диапазон до 255. Но в кодировках KOИ-8, СР-866, СР-1251, ISO 8859-5 и т.п. символы кириллицы имеют разные коды.
Если юникод - то символы кириллицы там располагаются в диапазоне где-то между 1024 и 1280.

PS. Есть еще кодировки переменной длины типа UTF-8, но, насколько мне известно, в Delphi отсутствуют средства для непосредственной работы с такими.

Последний раз редактировалось s-andriano; 31.03.2013 в 15:01.
s-andriano вне форума Ответить с цитированием
Старый 31.03.2013, 14:59   #14
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
ss - динамический массив встреченных символов
сс - динамический массив счетчиков
Изначально пустые
По индексам соответствуют друг другу
Ищу символ в массивеб если не нахожу - увеличиваю размерность и добавляю символ
В счетчике накапливаю кол-во повторений
Все
Почти понял
Спасибо
viks1 вне форума Ответить с цитированием
Старый 31.03.2013, 15:01   #15
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Не совсем так.
Для латиницы достаточно от 32 до 127.
А если нужна кириллица, то нужно понимать, какую именно кодировку Вы хотите использовать.
Если любую однобайтовую, то достаточен диапазон до 255. Но в кодировках KOИ-8, СР-866, СР-1251, ISO 8859-5 и т.п. символы кириллицы имеют разные коды.
Если юникод - то символы кириллицы там располагаются в диапазоне где-то между 1024 и 1280.
т.е создавать два массива ?
viks1 вне форума Ответить с цитированием
Старый 31.03.2013, 15:10   #16
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от viks1 Посмотреть сообщение
т.е создавать два массива ?
О каких массивах речь?
Если вместо одного, который был 0..255, то не нужно - достаточно одного 0..1279. Ну или с запасом 0..65535 - как я писал раньше.

Но сначала определитесь, с какой кодировкой Вы хотите работать.
s-andriano вне форума Ответить с цитированием
Старый 31.03.2013, 15:18   #17
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
О каких массивах речь?
Если вместо одного, который был 0..255, то не нужно - достаточно одного 0..1279. Ну или с запасом 0..65535 - как я писал раньше.

Но сначала определитесь, с какой кодировкой Вы хотите работать.
пробовал с запасом
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
 i:integer;
 ArrCount: array [0..65535] of integer;
begin

 stroka:=Edit1.Text;
vvod:=(AnsiUpperCase(stroka));
for i := 1 to Length(vvod) do
inc(ArrCount[Ord(vvod[i])]);
    for i := 0 to 255 do
    begin
      if ArrCount[i]>0 then Memo1.Lines.Add(Chr(i)+':'+IntToStr(ArrCount[i]));
    end;
при наборе русских символов выводит "-:1"
viks1 вне форума Ответить с цитированием
Старый 31.03.2013, 15:49   #18
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Перечитайте мое предыдущее сообщение.
Особенно его последнюю строку.
s-andriano вне форума Ответить с цитированием
Старый 31.03.2013, 16:00   #19
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Перечитайте мое предыдущее сообщение.
Особенно его последнюю строку.
Я не знаю с каким лучше, ну например с юникодом
viks1 вне форума Ответить с цитированием
Старый 31.03.2013, 21:35   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

viks, да выбросите Вы уникод, он Вам нужен в данной задаче?!

используйте вместо типа String тип AnsiString и старая ваша программа (где отводится массив от 0 до 255 ) должна нормально работать!

Код:
procedure TForm1.Button1Click(Sender: TObject);
var str: AnsiString;
    i: integer;
    ArrCount: array[0..255] of Integer;
begin
  for i:=0 to 255 do ArrCount[i]:=0;

  str:=AnsiUpperCase(Edit1.Text);

  for i:=1 to Length(str) do
    Inc(ArrCount[Ord(str[i])]);

  Memo1.Lines.Clear;
  for i:=0 to 255 do
    if ArrCount[i]>0 then Memo1.Lines.Add(Chr(i)+':'+IntToStr(ArrCount[i]));
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество символов в строке экрана Решетова Алена Паскаль, Turbo Pascal, PascalABC.NET 10 18.02.2013 13:38
Количество различных символов в строке Pasha_Sh Паскаль, Turbo Pascal, PascalABC.NET 2 25.10.2012 21:15
Количество символов в строке! kalosha-stepa Паскаль, Turbo Pascal, PascalABC.NET 7 24.09.2012 08:09
Количество символов в строке Ivan357 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2008 17:06