![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() вот исходник кода, программа должна из строки Label1 переводить значение в Label2 с заменой букв а на б, пробелов на '-', и подсчитывать количество замен(в зависимости от того, поставлена галочка в CheckBox'ах или нет). У меня выдает ошибку в строках:
while Pos('а', s) > 0 do s[Pos('a',s)]:='a'; while Pos(' ',s)>0 do s[Pos(' ',s)]:='-';... если заменить тип s на string, то программа запускается, но нужных действий не производит((( помогите... код вот: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; Button1: TButton; Edit2: TEdit; Edit3: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var n, s:integer; begin n:=0; Edit3.Text:=''; Edit2.Text:=''; if CheckBox2.Checked then while Pos('а', s) > 0 do begin n:=n+1; s[Pos('a',s)]:='a'; end; if CheckBox3.Checked then while Pos(' ',s)>0 do begin n:=n+1; s[Pos(' ',s)]:='-'; end; if CheckBox1.Checked then Edit3.Text:=IntToStr(n); Edit2.Text:=s; end; end. Последний раз редактировалось Admin, 15.04.2009 в 18:42. |
#2
|
|||
|
|||
![]() 1. s должно быть именно string
2. не вижу задание s значения. 3. Такой код лучше переписать на циклы типа: Код:
var i, n : Integer; s : String; begin n := 0; s := Edit1.Text; // начальное значение For I := 1 To Length(s) Do If s[i] = 'a' Then Begin s[i] := 'a'; Inc(n); End; If s[i] = ' ' Then Begin s[i] := '-'; Inc(n); End; end; Условия по флажкам сам добавишь ![]() |
#3
|
|||
|
|||
![]() Admin мне надо именно без перебора значений символов (не надо вот этих [i])
а выглядеть примерно так должно: http://s48.radikal.ru/i119/0904/06/46ada435801c.jpg т.е надо именно так, как сделано в программе, тока убрать этот баг ![]() з.ы: я тока начал над делфи мозги ломать, поэтому я noob... ![]() |
#4
|
|||
|
|||
![]() Гы, Pos - это тот же перебор, только скрытый от тебя внутри стандартной функции. С циклом, в котором ты сделаешь все условия в один проход будет быстрее и красивее.
Кстати, как я сказал - где инициализация s??? |
#5
|
||||
|
||||
![]() Сразу 2 ошибки вижу, тип s подразумевается строка а у вас целое. Вы пишете, что надо менять а на б, а фактически гоняете цикл до сваливания по переполнению n
Код:
while Pos('а', s) > 0 do begin n:=n+1; s[Pos('a',s)]:='a'; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 15.04.2009 в 19:34. |
#6
|
|||
|
|||
![]() извините за наглость, конечно, а можно просто целый код написать и все...
![]() |
#7
|
||||
|
||||
![]() Ну ленивый народ пошел:
Код:
procedure TForm1.Button1Click(Sender: TObject); var n: Integer; s: String; begin n:=0; Edit3.Text:=''; Edit2.Text:=''; s := 'что там мы-типа пытаемся заменить'; if CheckBox2.Checked then while Pos('а', s) > 0 do begin n:=n+1; s[Pos('a',s)]:='б'; end; if CheckBox3.Checked then while Pos(' ',s)>0 do begin n:=n+1; s[Pos(' ',s)]:='-'; end; if CheckBox1.Checked then Edit3.Text:=IntToStr(n); Edit2.Text:=s; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
![]() спасибо ОГРОМНОЕ
![]() |