Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка строки, подсчет букв 
:(
    Опции темы
Laprado
Дата 16.2.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



Дан текст, нужно внем убрать все знаки препинания и подсчитать кол-во букв а,б,в,г и т.д. весь алфавит. Как это лучше сделать?
--------------------
PM MAIL   Вверх
Rodman
Дата 16.2.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

uses Sysutils;
var st:string;
      count, i:integer;
BEGIN
   writeln('Enter string');
   readln(st);
   for i:=Legnth(st) downto 1 do
   begin
       if(st[i]=',' or st[i]=';')then
         Delete(st, i, 1);
   end;
   count:=0;
   for i:=Legnth(st) downto 1 do
      if(st[i] in 'а'..'я')then
         inc(count);
   writeln(count);
   readln;
END.


подобный вопросы в ЦЕНТР ПОМОЩИ
PM MAIL WWW Skype GTalk YIM MSN   Вверх
ivan219
Дата 16.2.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



А так если нужно подсчитать сколько букв отдельно smile
Код

   for i:=Legnth(st) downto 1 do
    case St[I] of
         'A','a': Inc(A[1]);
         .
         .
         'Я','я': Inc(A[32]); 
    end;


Это сообщение отредактировал(а) ivan219 - 16.2.2007, 15:18
PM MAIL ICQ   Вверх
Sunvas
Дата 16.2.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Laprado @  16.2.2007,  14:29 Найти цитируемый пост)
Как это лучше сделать?

Если тебе в конечном итоге нужно только подсчитать количество букв, то не нужно заморачиваться с удалением всех знаков препинания.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Laprado
Дата 16.2.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



Вопрос немного неправильно задал. Нужно подсчитать сколько всего каждой из букв, например буква "а" встречается 2000 раз, "б" - 1300 раз и т.д. При этом нужно знать сколько вообще всего букв, тут бы Length подошел, только нужно "чистые" буквы без знаков препинания. Пробелы тоже нужно считать.

Для удаления знаков препинания пытаюсь сделать как ниже, но обрабатывается только первый символ из константы prep, остальные не видит...

Код

const
  prep = '!?,.;:<>"=-%*@#()';

var
  Form1: TForm1;
  txt:String;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    i: Integer;
begin
txt := memo1.Lines.Text;

for i:=Length(txt) downto 1 do begin
  if pos(txt[i], prep) = 1 then
    delete(txt,i,1);
end;

Memo1.Lines.Text := txt;
end;

end.


Добавлено @ 17:28 
ivan219, можно код подробнее... Тут А массив? Как он задается?
--------------------
PM MAIL   Вверх
Rodman
Дата 16.2.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

const
  prep = '!?,.;:<>"=-%*@#()';
var
  Form1: TForm1;
  txt:String;
  a:array [1..32] of integer;

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
    i: Integer;
begin
txt := memo1.Lines.Text;
for i:=Length(txt) downto 1 do begin
  if ((txt[i]='!'))or(txt[i]='?')or(txt[i]=',')or(txt[i]='.')or(txt[i]=';')or(txt[i]=':')or(txt[i]='<')or(txt[i]='>')or(txt[i]='"')or(txt[i]='=')or(txt[i]='-')
   or(txt[i]='%')or(txt[i]='*')or(txt[i]='@')or(txt[i]='#')or(txt[i]='(')or(txt[i]=')')) then//не понятно почему не видет
    delete(txt,i,1);
end;

for i:=Length(txt) downto 1 do begin
   case txt[I] of
         'A','a': Inc(A[1]);
         .
         .
         'Я','я': Inc(A[32]); 
    end;
end;

Memo1.Lines.Text := txt;
end;
end.


Это сообщение отредактировал(а) Rodman - 16.2.2007, 17:36
PM MAIL WWW Skype GTalk YIM MSN   Вверх
W4FhLF
Дата 16.2.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Код

function GetCharCount(s: String): dword;
var
symbol: array[0..254] of dword;
i: dword;
begin
  ZeroMemory(@symbol, sizeof(dword)*255);
  for i := 0 to length(s) do
    inc(symbol[ord(s[i])]);
  Result := symbol[$20]; // пробелы
  for i := $E0 to $FF do
    inc(Result, symbol[i-1]); // русские буквы в нижнем регистре
  for i := $C0 to $DF do
    inc(Result, symbol[i-1]); // русские буквы в верхнем регистре
  for i := $61 to $7A do
    inc(Result, symbol[i]); // английские буквы в верхнем регистре
  for i := $41 to $5A do
    inc(Result, symbol[i]); // английские буквы в нижнем регистре
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(IntToStr(GetCharCount('aZAA  мсс555.Ы')));
end;


Не знаю насколько "красив" этот код, но он будет работать быстрее, чем все остальные предложеные. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Laprado
Дата 16.2.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 24.5.2006
Где: Firefox

Репутация: нет
Всего: нет



Спасибо всем! Все получилось! smile
--------------------
PM MAIL   Вверх
ivan219
Дата 17.2.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(Laprado @  16.2.2007,  17:25 Найти цитируемый пост)
 Как он задается?

Код

var
  A: Array of Integer;
.
.
.
 SetLength(A,32); //32-число яйчеек (всего), индекс первой яйчейки начинается с 0 A[0]...A[31]

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.