Welcome to the Monastery PerlMonks

### Re: reverse a string in place

by Athanasius (Chancellor)
 on Mar 24, 2013 at 08:04 UTC ( #1025128=note: print w/replies, xml ) Need Help??

in reply to reverse a string in place

Just want to point out that the algorithm as given is incorrect. n is the number of elements in the array, so the first line should read:

```function reverse_in_place(a[0 .. (n - 1)])

Alternatively, you would need to change the arithmetic:

```function reverse_in_place(a[0 .. n])
for i from 0 to floor( ((n + 1) / 2) - 1 )
tmp  := a[i]
a[i] := a[n - i]
a[n - i] := tmp

Update 1: Implementing the algorithm in Perl is straightforward, provided you are allowed to use the built-in functions split and join (scalar isn’t really needed in the sub):

```use strict;
use warnings;

my \$string = 'abcdefghi';

print 'Original string: ', \$string,                   "\n";
print 'Using function:  ', reverse_in_place(\$string), "\n";
print 'Using reverse:   ', scalar reverse  (\$string), "\n";    # For c
+omparison

sub reverse_in_place
{
my (\$string) = @_;
my  @array   = split //, \$string;
my  \$n       = scalar @array;

for (0 .. \$n / 2 - 1)
{
my \$tmp             = \$array[\$_];
\$array[\$_]          = \$array[\$n - \$_ - 1];
\$array[\$n - \$_ - 1] = \$tmp;
}

return join('', @array);
}

Update 2: Fixed out-by-one error in the for loop. Thanks to j0se for pointing it out.

Hope that helps,

 Athanasius <°(((>< contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: reverse a string in place
by reisinge (Friar) on Mar 24, 2013 at 10:27 UTC

Hello, your Perl solution seems to have problems with strings that have an even number of characters:

```Original string: ab
Using function:  ab
Using reverse:   ba

Original string: abcd
Using function:  dbca
Using reverse:   dcba

Excellence is an art won by training and habituation: we do not act rightly because we have virtue or excellence, but we rather have these because we have acted rightly. -- Will Durant

Re^2: reverse a string in place
by perlynewby (Beadle) on Jun 28, 2015 at 00:26 UTC

I don't know how old this thread is but I found it interesting to practice manipulation for strings,

please keep in mind that I am but a few weeks into this perl code but did I meet the requirements? other than using length or split

```use strict;
use warnings;

my \$string = 'abcdefghi';
#let's find the ways to count the elements in string;
my \$l = length(\$string); #finding number of elemnts
my @ind=split //,\$string; #finding the number of elements
#assigning the start of our last element for our looping
my \$n = (scalar @ind )-1; #getting the last element to start count bac
+kwards optinal

for (my \$i=(length (\$string)-1) ; \$i >= 0; \$i-- ){
print \$ind[\$i];
}

print "\nfor comparison :", scalar reverse(\$string),"\n";

Good job, especially the use strict; use warnings;. Here's another way based on your code that you may find interesting. (EDIT: My bad... I totally glanced over the fact no built-ins were allowed).

```while (my \$letter = pop @ind){
print \$letter;
}

pop() removes the last element of an array. Also see shift(), unshift() and push()

-stevieb

"without using any other array or built-in function"

yeah, I had no idea how to get the number of elements without the use of at least one build-in option.

Also, the no use of array is tricky for me.

I think I will use these questions that other asks to practice my code but sometimes it is difficult to understand what a piece of code without a little help with comments.

but then again, I am learning so everything is a little tricky...hmm, sometimes I think I should have picked to learn the piccolo over the summer ;-)

is is a nice function

and now playing with shift and unshift to implement into next little prog

thanks

Create A New User
Node Status?
node history
Node Type: note [id://1025128]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
As of 2017-06-26 21:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How many monitors do you use while coding?

Results (594 votes). Check out past polls.