Articles   Members Online: 3
-Article/Tip Search
-News Group Search over 21 Million news group articles.
-Delphi/Pascal
-CBuilder/C++
-C#Builder/C#
-JBuilder/Java
-Kylix
Member Area
-Home
-Account Center
-Top 10 NEW!!
-Submit Article/Tip
-Forums Upgraded!!
-My Articles
-Edit Information
-Login/Logout
-Become a Member
-Why sign up!
-Newsletter
-Chat Online!
-Indexes NEW!!
Employment
-Build your resume
-Find a job
-Post a job
-Resume Search
Contacts
-Contacts
-Feedbacks
-Link to us
-Privacy/Disclaimer
Embarcadero
Visit Embarcadero
Embarcadero Community
JEDI
Links
How to reverse a string Turn on/off line numbers in source code. Switch to Orginial background IDE or DSP color Comment or reply to this aritlce/tip for discussion. Bookmark this article to my favorite article(s). Print this article
15-Sep-02
Category
Object Pascal-Strings
Language
Delphi All Versions
Views
29
User Rating
No Votes
# Votes
0
Replies
0
Publisher:
DSP, Administrator
Reference URL:
DKB
			Author: William Gerbert

How to reverse a string

Answer:

Here are three examples how to reverse a string:


#1, While easy to understand suffers from a lot of memory reallocation. Each time 
the next letter is added to s2, it's added to the beginning of the string causing a 
reallocation of the entire string.


1   function ReverseString(s: string): string;
2   var
3     i: integer;
4     s2: string;
5   begin
6     s2 := '';
7     for i := 1 to Length(s) do
8       s2 := s[i] + s2;
9     Result := s2;
10  end;



#2, Taking advantage of the fact that we can work at both ends of the string at 
once AND the fact that IF there is a middle character, ie. an odd number of 
characters in the string, it doesn't change position at all and we can eliminate 
all the memory allocations, work completely within the source string swapping from 
end to end working toward the middle and only having to make 1/2 of a loop through 
the string.



11  procedure ReverseStr(var Src: string);
12  var
13    i, j: integer;
14    C1: char;
15  begin
16    j := Length(Src);
17    for i := 1 to (Length(Src) div 2) do
18    begin
19      C1 := Src[i];
20      Src[i] := Src[j];
21      Src[j] := C1;
22      Dec(j);
23    end;
24  end;



#3, One disadvantage of #2 can be seen when trying to fill one control with the 
contents of another.  For example, two TEdits.  Since TEdit.Text can't be sent as a 
var parameter you'll need to first make use of a temporary string and then set the 
second TEdit:


25  var
26    tStr: string;
27  begin
28    tStr := Edit1.Text;
29    ReverseStr(tStr);
30    Edit2.Text := tStr;



However, using #3 this code turns into,


Edit2.Text := ReverseStr(Edit1.Text);

In addition, we lost 1 local var and the loop body was reduced since we could use 
Result directly swapping as we go!


31  function ReverseStr(const Src: string): string;
32  var
33    i, j: integer;
34  begin
35    j := Length(Src);
36    SetLength(Result, j);
37    for i := 1 to (Length(Src) div 2) do
38    begin
39      Result[i] := Src[j];
40      Result[j] := Src[i];
41      Dec(j);
42    end;
43  end;


			
Vote: How useful do you find this Article/Tip?
Bad Excellent
1 2 3 4 5 6 7 8 9 10

 

Advertisement
Share this page
Advertisement
Download from Google

Copyright © Mendozi Enterprises LLC