Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: reverse a string in place

by Athanasius (Abbot)
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,


Comment on Re: reverse a string in place
Select or Download Code
Replies are listed 'Best First'.
Re^2: reverse a string in place
by j0se (Pilgrim) 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 (Sexton) 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

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1025128]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (10)
As of 2015-07-08 02:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls