Reverse words in a string

From Rosetta Code
Revision as of 00:34, 27 March 2014 by rosettacode>Gerard Schildberger (added a new Rosetta Code task (Reverse words in a string).)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Reverse words in a string is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

The task is to reverse the order of all tokens in a number of strings.

  • Hey you, Bub!   would be shown reversed as:   Bub! you, Hey
  • Tokens   are any non-blank characters separated by blanks.
  • You can consider the ten strings as ten lines, and tokens as words.
  • Multiple (or superfluous blanks) can be compressed into one blank.
  • Some strings have no words, so a blank string (line) should be shown.
  • Display the strings in order (1st, 2nd, 3rd, ···), and one string per line.
  • Keep the letter case (upper/lower) and all punctuation intact.
  • This example hasn't any tabs or other non-visible characters.
             (ten lines within the box)
 line
     ╔════════════════════════════════════════╗
   1 ║  ---------- Ice and Fire ------------  ║
   2 ║                                        ║  ◄─── a blank line here.
   3 ║  fire, in end will world the say Some  ║
   4 ║  ice. in say Some                      ║
   5 ║  desire of tasted I've what From       ║
   6 ║  fire. favor who those with hold I     ║
   7 ║                                        ║  ◄─── a blank line here.
   8 ║  ... elided paragraph last ...         ║
   9 ║                                        ║  ◄─── a blank line here.
  10 ║  Frost Robert -----------------------  ║
     ╚════════════════════════════════════════╝

REXX

<lang rexx>/*REXX pgm reverses the order of tokens in a string, but not the letters*/ @. = @.1 = "---------- Ice and Fire ------------" @.2 = ' ' @.3 = "fire, in end will world the say Some" @.4 = "ice. in say Some" @.5 = "desire of tasted I've what From" @.6 = "fire. favor who those with hold I" @.7 = ' ' @.8 = "... elided paragraph last ..." @.9 = ' ' @.10 = "Frost Robert -----------------------"

 do   j=1  while  @.j\==;  $=       /*process each "line"; nullify $.*/
   do k=1  for  words(@.j)            /*process each word in the string*/
   $=word(@.j,k) $                    /*prepend the word to a new line.*/
   end   /*k*/                        /* [↑]  could do this another way*/
 say $                                /*display newly constructed line.*/
 end     /*j*/                        /*stick a fork in it, we're done.*/</lang>

output when using the ten lines of input:

------------ Fire and Ice ----------

Some say the world will end in fire,
Some say in ice.
From what I've tasted of desire
I hold with those who favor fire.

... last paragraph elided ...

----------------------- Robert Frost