<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.7" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: string this Reverse</title>
	<link>http://www.technicalinterviews.net/string-this-reverse/</link>
	<description>This site features a collection of common technical interview questions gathered by a group of programmers who have been through, and given, lots of technical interviews. There is an emphasis on C++ and game programming technical interviews, but most of the questions are relevant to any technical interview.</description>
	<pubDate>Thu, 04 Dec 2008 19:09:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.7</generator>

	<item>
		<title>by: kiklop</title>
		<link>http://www.technicalinterviews.net/string-this-reverse/#comment-16</link>
		<pubDate>Sat, 30 Dec 2006 17:47:04 +0000</pubDate>
		<guid>http://www.technicalinterviews.net/string-this-reverse/#comment-16</guid>
					<description>This is a version with buffer:

&lt;div class="code"&gt;
void reverseWords(char *aString) {
   size_t strSize = strlen(aString);
   if (strSize == 0) {
      return;
   }
   char *buff = new char[strSize + 1U];
   std::memset(buff,0,strSize + 1U);
   char *locStr = aString;
   char *revPos = NULL;
   ptrdiff_t wordSize = 0;
   while (*locStr != ''){
      char *startPos = locStr;
      while((*locStr != ' ') &#38;&#38; (*locStr != '')) {
        locStr++;
      }
      wordSize = locStr - startPos;
      revPos = locStr;
      while(wordSize--) {
        *buff++ = *(--revPos);
      }
      while((*locStr == ' ') &#38;&#38; (*locStr != '')) {
        *buff++ = *locStr++;
      }
    }
    delete [] buff;
    buff = NULL;
}
&lt;/div&gt;

This one is in-place:
&lt;div class="code"&gt;
void reverseWords(char *&#38;aString) {
   if (NULL == aString) {
      return;
   }
   char *locStr = aString;
   char *revPos = NULL;
   double wordSize = 0.0;
   int counter = 0;
   while (*locStr != ''){
      char *startPos = locStr;
      char *buff = locStr;
      while((*locStr != ' ') &#38;&#38; (*locStr != '')) {
        locStr++;
      }
      std::modf((locStr - startPos)/2.0,&#38;wordSize);
      revPos = locStr;
      counter = static_cast(wordSize);
      while(counter--) {
        char pt = *buff;
        *buff++ = *(--revPos);
        *revPos = pt;
      }
      while((*locStr == ' ') &#38;&#38; (*locStr != '')) {
        locStr++;
      }
   }
}
&lt;/div&gt;</description>
		<content:encoded><![CDATA[<p>This is a version with buffer:</p>
<div class="code">
void reverseWords(char *aString) {<br />
   size_t strSize = strlen(aString);<br />
   if (strSize == 0) {<br />
      return;<br />
   }<br />
   char *buff = new char[strSize + 1U];<br />
   std::memset(buff,0,strSize + 1U);<br />
   char *locStr = aString;<br />
   char *revPos = NULL;<br />
   ptrdiff_t wordSize = 0;<br />
   while (*locStr != &#8216;&#8217;){<br />
      char *startPos = locStr;<br />
      while((*locStr != &#8216; &#8216;) &amp;&amp; (*locStr != &#8216;&#8217;)) {<br />
        locStr++;<br />
      }<br />
      wordSize = locStr - startPos;<br />
      revPos = locStr;<br />
      while(wordSize&#8211;) {<br />
        *buff++ = *(&#8211;revPos);<br />
      }<br />
      while((*locStr == &#8216; &#8216;) &amp;&amp; (*locStr != &#8216;&#8217;)) {<br />
        *buff++ = *locStr++;<br />
      }<br />
    }<br />
    delete [] buff;<br />
    buff = NULL;<br />
}
</div>
<p>This one is in-place:</p>
<div class="code">
void reverseWords(char *&amp;aString) {<br />
   if (NULL == aString) {<br />
      return;<br />
   }<br />
   char *locStr = aString;<br />
   char *revPos = NULL;<br />
   double wordSize = 0.0;<br />
   int counter = 0;<br />
   while (*locStr != &#8216;&#8217;){<br />
      char *startPos = locStr;<br />
      char *buff = locStr;<br />
      while((*locStr != &#8216; &#8216;) &amp;&amp; (*locStr != &#8216;&#8217;)) {<br />
        locStr++;<br />
      }<br />
      std::modf((locStr - startPos)/2.0,&amp;wordSize);<br />
      revPos = locStr;<br />
      counter = static_cast(wordSize);<br />
      while(counter&#8211;) {<br />
        char pt = *buff;<br />
        *buff++ = *(&#8211;revPos);<br />
        *revPos = pt;<br />
      }<br />
      while((*locStr == &#8216; &#8216;) &amp;&amp; (*locStr != &#8216;&#8217;)) {<br />
        locStr++;<br />
      }<br />
   }<br />
}
</div>
]]></content:encoded>
				</item>
</channel>
</rss>
