XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Hard & Soft
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
Задача по Delphi 7
Срочно нужна помощь!
Условие задачи: Подсчитать количество слов, содержащих определенный символ.
Прошу сказать, где я допустил ошибку, или может я вообще неправильно сделал задачу... Скажите тогда, как правильно!!!
» Код
Код:
procedure Button1Click(Sender: TObject);
    procedure Edit2Click(Sender: TObject);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SC,i,q,k,SP:Integer;
  S,SFind,Ss:String;
  B:array [1..50] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
k:=0;
SC:=0;
S:=edit1.text;
if edit2.text='' then ShowMessage('Вы не ввели символы для поиска!') else begin
button1.caption:='Считать количество слов с буквой ' + edit2.text;
SFind:=edit2.text;
for i:=1 to length(S) do if (S[i]=' ')
then  Ss:=copy(S,1,i-1);
      Delete(S,1,i);
      for q:=1 to length(Ss) do if (Ss[q]=SFind) and (B[q]=1) then
      k:=k+1;
      B[q]:=0;
end;
edit3.text:=IntToStr(k);
end;


ОЧЕНЬ СРОЧНО! Заранее спасибо!

Отредактировано Flareon, 25.09.2008 в 22:54.
Старый 25.09.2008, 22:46
NETRAT

offline
Опыт: 83,712
Активность:
токенизация(разбиение на слова) строки неправильная - нужно запоминать предыдущий пробел и текущий, и откусывать строку между ними. т.о. все слова находятся за один проход. А у тебя подстроки удаляются из строки, при этом курсор на начало не сбрасывается. Вообще криво и неоптимально сделано, потому и не работает.
Задачу можно решать по-другому - простым поиском по строке.
  1. Ищем в строке начиная с ее начала наш символ, если найден, то увеличиваем количество слов с символом на 1 и переходим на пункт 2, если нет, то понятно резалт = 0.
  2. Ищем в строке начиная с текущей позиции, пробел, если найден, то переходим к п.1., если нет, то выходим.
Это куда проще чем токенизация. Фактически достаточно цикла и двух AnsiPos
Старый 26.09.2008, 08:11
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:05.