<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: string this Reverse</title>
	<atom:link href="http://www.technicalinterviews.net/string-this-reverse/feed/" rel="self" type="application/rss+xml" />
	<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>
	<lastBuildDate>Fri, 07 Oct 2011 20:18:23 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: kiklop</title>
		<link>http://www.technicalinterviews.net/string-this-reverse/comment-page-1/#comment-16</link>
		<dc:creator>kiklop</dc:creator>
		<pubDate>Sat, 30 Dec 2006 17:47:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.technicalinterviews.net/string-this-reverse/#comment-16</guid>
		<description>This is a version with buffer:

&lt;div class=&quot;code&quot;&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 != &#039;&#039;){
      char *startPos = locStr;
      while((*locStr != &#039; &#039;) &amp;&amp; (*locStr != &#039;&#039;)) {
        locStr++;
      }
      wordSize = locStr - startPos;
      revPos = locStr;
      while(wordSize--) {
        *buff++ = *(--revPos);
      }
      while((*locStr == &#039; &#039;) &amp;&amp; (*locStr != &#039;&#039;)) {
        *buff++ = *locStr++;
      }
    }
    delete [] buff;
    buff = NULL;
}
&lt;/div&gt;

This one is in-place:
&lt;div class=&quot;code&quot;&gt;
void reverseWords(char *&amp;aString) {
   if (NULL == aString) {
      return;
   }
   char *locStr = aString;
   char *revPos = NULL;
   double wordSize = 0.0;
   int counter = 0;
   while (*locStr != &#039;&#039;){
      char *startPos = locStr;
      char *buff = locStr;
      while((*locStr != &#039; &#039;) &amp;&amp; (*locStr != &#039;&#039;)) {
        locStr++;
      }
      std::modf((locStr - startPos)/2.0,&amp;wordSize);
      revPos = locStr;
      counter = static_cast(wordSize);
      while(counter--) {
        char pt = *buff;
        *buff++ = *(--revPos);
        *revPos = pt;
      }
      while((*locStr == &#039; &#039;) &amp;&amp; (*locStr != &#039;&#039;)) {
        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 != &#8221;){<br />
      char *startPos = locStr;<br />
      while((*locStr != &#8216; &#8216;) &amp;&amp; (*locStr != &#8221;)) {<br />
        locStr++;<br />
      }<br />
      wordSize = locStr &#8211; startPos;<br />
      revPos = locStr;<br />
      while(wordSize&#8211;) {<br />
        *buff++ = *(&#8211;revPos);<br />
      }<br />
      while((*locStr == &#8216; &#8216;) &amp;&amp; (*locStr != &#8221;)) {<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 != &#8221;){<br />
      char *startPos = locStr;<br />
      char *buff = locStr;<br />
      while((*locStr != &#8216; &#8216;) &amp;&amp; (*locStr != &#8221;)) {<br />
        locStr++;<br />
      }<br />
      std::modf((locStr &#8211; 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 != &#8221;)) {<br />
        locStr++;<br />
      }<br />
   }<br />
}
</div>
]]></content:encoded>
	</item>
</channel>
</rss>

