User Tools

Site Tools


reversing_20a_20string

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
reversing_20a_20string [2018/03/31 13:19] – external edit 127.0.0.1reversing_20a_20string [2024/01/05 00:21] (current) – external edit 127.0.0.1
Line 2: Line 2:
  
 //by Jon Ripley, May 2006//\\ \\  Reversing is a simple string manipulation that often has a sub-optimal solution.\\ \\  One commonly used method to reverse strings is:\\  //by Jon Ripley, May 2006//\\ \\  Reversing is a simple string manipulation that often has a sub-optimal solution.\\ \\  One commonly used method to reverse strings is:\\ 
 +<code bb4w>
         a$="Hello world!"         a$="Hello world!"
         IF LEN(a$)>0 THEN         IF LEN(a$)>0 THEN
Line 12: Line 13:
         ENDIF         ENDIF
         PRINT a$         PRINT a$
 +</code>
 This method using the built in string function **MID$(** four times and requiring one temporary variable **t$** can be made approximately 4 times faster by improving the algorithm used.\\ \\  It might seem logical to use the **SWAP** command to exchange the characters in the string, however the following code is a syntax error:\\  This method using the built in string function **MID$(** four times and requiring one temporary variable **t$** can be made approximately 4 times faster by improving the algorithm used.\\ \\  It might seem logical to use the **SWAP** command to exchange the characters in the string, however the following code is a syntax error:\\ 
 +<code bb4w>
         SWAP MID$(a$,i%,1),MID$(a$,l%-i%,1)         SWAP MID$(a$,i%,1),MID$(a$,l%-i%,1)
 +</code>
 The BBC BASIC manual tells us that **SWAP** can exchange the contents of two locations in memory, if we know the address of the string we can manipulate the string directly in memory. To do this use the pointer operator **^** to locate the address of the string in memory. The address in memory of **any$** is **^any$**. The address of the text stored in **any$** is **!^any$**.\\ \\  We can use this information to create the following optimal code to reverse a string:\\  The BBC BASIC manual tells us that **SWAP** can exchange the contents of two locations in memory, if we know the address of the string we can manipulate the string directly in memory. To do this use the pointer operator **^** to locate the address of the string in memory. The address in memory of **any$** is **^any$**. The address of the text stored in **any$** is **!^any$**.\\ \\  We can use this information to create the following optimal code to reverse a string:\\ 
 +<code bb4w>
         a$="Hello world!"         a$="Hello world!"
         IF a$>"" THEN         IF a$>"" THEN
Line 23: Line 28:
         ENDIF         ENDIF
         PRINT a$         PRINT a$
 +</code>
 Here we loop through the first half of the string and swap the characters with those in the second half of the string.\\ \\  This algorithm can be made significantly faster by rewriting it in assembly language. Here we loop through the first half of the string and swap the characters with those in the second half of the string.\\ \\  This algorithm can be made significantly faster by rewriting it in assembly language.
reversing_20a_20string.1522502378.txt.gz · Last modified: 2024/01/05 00:16 (external edit)