PDA

View Full Version : سوال: در رابطه با 2تابع replace و insert



nimaarek
دوشنبه 17 تیر 1392, 00:10 صبح
سلام دوستان من 2 تا سوال دارم
سوال اول :
من دارم سعی میکنم از textbox یه ورودی از نوع رشته بگریم و بعد بیام تعریف کنم که جای هر حرف (همه حروف انگلیسی) با یه چیز دیگه عوض کنه مثلا اگه رشته ما alireza باشه و من تعریف کنم که جای a مثلا the جایگزین بشه جای l مثلا hello و همینطوری ... .
alireza بشه thehelloreza
اما مشکل اینجاست که تابع replace فقط یک حرف رو تبدیل به چیزه دیگه میکنه ، یعنی من باید 26 بار این تابع رو صدا بزنم ؟
و اینکه مثلا من اگه حرف a رو به the تغییر دادن بعدش حرف بعدی اگه t بود اون the قبلی که جایگزین شده هم تغییر میکنه ؟

سوال دوم :
مشکل با تابع insert هست ، من میخوام اگه تعداد حروف وارد شده در textbox اگه زوج بود یک حرف در میان این کاراکتر '-' بین حروف اضافه بشه مثلا:
alireza بشه -> a-l-i-r-e-z-a

در کل من خیلی با دلفی کار نکردم اما این رو نوشتم ولی خیلی جاهاش کار نمیکنه !
ممنون میشم کمکم کنید

var
Form2: TForm2;
s,s2,s3,s4,s5 : string;
i,k : Integer;
implementation

{$R *.dfm}
function recrsive(n:string):string;
begin
s4 := StringReplace(n, 'a', 'THE',[rfReplaceAll, rfIgnoreCase]);
s4 := StringReplace(n, 'b', 'END',[rfReplaceAll, rfIgnoreCase]);
end;

procedure TForm2.btn1Click(Sender: TObject);
begin
s := Trim(edt1.Text);
s3 := Trim(edt1.Text);
s2 := '';
SetLength (s2, Length(s));
k := 0;
if Length(s) mod 2 = 0 then
begin
for I := 1 to Length(s) do
begin
k := i+1;
Insert('-',S,k);
showMessage(s);
end;
end;

nimaarek
دوشنبه 17 تیر 1392, 14:15 عصر
کسی نیست کمک کنه ؟ :|

Mask
دوشنبه 17 تیر 1392, 15:06 عصر
شبگرد هم میپرسیدی جواب میدادم.

اما مشکل اینجاست که تابع replace فقط یک حرف رو تبدیل به چیزه دیگه میکنه ، یعنی من باید 26 بار این تابع رو صدا بزنم ؟
برای این چنین تغییری میتوانید از همون تابع replace استفاده کنید و یا میتوانید با یک For تک تک کارکتر ها رو بررسی کنید و در Edit دیگری خروجی رو نشون بدید.

و اینکه مثلا من اگه حرف a رو به the تغییر دادن بعدش حرف بعدی اگه t بود اون the قبلی که جایگزین شده هم تغییر میکنه ؟
تابع replace دارای خروجی هست . شما خروجی رو در جای دیگه نگهداری کنید و دست آخر سر هم کنید . تا تغییرات چند بار اعمال نشود.

textbox
قابل توجهت گه textbox در vb هست . در دلفی باید بگید Edit

مشکل با تابع insert هست ، من میخوام اگه تعداد حروف وارد شده در textbox اگه زوج بود یک حرف در میان این کاراکتر '-' بین حروف اضافه بشه مثلا:
کدهای زیر رو ببینید :

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Edit2.Text := '';
if Length(Edit1.Text) mod 2 = 0 then
begin
for i := 1 to Length(Edit1.Text) do
begin
Edit2.Text := Edit2.Text + Edit1.Text[i];
Edit2.Text := Edit2.Text + '-';
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
s: string;
begin
s := Edit1.Text;
if Length(s) mod 2 = 0 then
begin
for i := 1 to Length(s)*2 do
if i mod 2 = 0 then
Insert('-', s, i);
Edit2.Text:=(s);
end;
end;
این 2 کد کاری رو که نیاز دارید انجام میده . البته مطمئنا کد ساده تری هم هست. اما در کل یه همچین چیزی میشه.

یوسف بیا که ریاضی بازی شد:چشمک::خجالت:

یوسف زالی
دوشنبه 17 تیر 1392, 15:35 عصر
سلام علیکم سلام علیکم!!
سوالت رو جای بدی پرسیدی.

با کسب اجازه از حمزه،
مورد اول:



const
CIPHER_CODES: array['a'..'z'] of string =
(
'the',
'hello',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
''
);

function Cipher(S: string): string;
var
i: integer;
begin
Result := '';
for i := 1 to length(S) do
Result := Result + CIPHER_CODES[S[i]];
end;
.
.
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Cipher('aabcd'));
end;



سوال دوم:


function EnDashEvenString(S: string): string;
var
i: integer;
begin
if length(S) = 0 then
Exit;

Result := S;
if Odd(length(S)) then
Exit;

Result := S[1];
for i := 2 to length(S) do
Result := Result + '-' + S[i];
end;

.
.

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(EnDashEvenString('aaabcd'));
end;

Mask
دوشنبه 17 تیر 1392, 15:42 عصر
ای ول داری:تشویق:
این odd منو بدجور گرفت:لبخندساده:

یوسف زالی
دوشنبه 17 تیر 1392, 16:04 عصر
شاکریم!!!
اون ثابت آرایه ای از رشته که اومد به ذهنم، خود من رو اصلا تحت تاثیر قرار داده D;

nimaarek
سه شنبه 18 تیر 1392, 04:14 صبح
دوستان خیلی خیلی خیلی ممنون !
فقط یک سوال دیگه (ببخشید دیگه من نوب ام)وقتی همه اینکار هارو میکنم داخل یه شرط قرار میدم نتیجه شرط true نمیشه مثلا :
procedure TForm2.btn1Click(Sender: TObject);
begin
s := UpperCase(edt2.Text);
s2 := (Cipher(s));
if (s = s2) then
begin
ShowMessage('ok!');
end
else
ShowMessage('not ok!');
//-----------------------
ShowMessage(s2);
end;
اما ShowMessage(s2); درست کار میکنه