Question: Reverse the order of words in a string in C using as little additional memory as possible.
Answer: The solution for this questions uses the solution of Reverse a String. I am going to make a small change to that solution by adding a length parameter. It will probably be better for you to read through that question before proceeding further with this one. Note that a space is being used to delimit the words in the sentence. Let’s look at an example before we dive into the code.
Original Sentence: My car is very fast
Modifies Sentence: fast very is car My
void reverseWords( char * str )
{
int i = 0, j = 0;
reverseString( str, strlen(str) ); // tsaf yrev si rac yM
while( 1 ) // Loop forever
{
if( *(str+j) == ' ' || *(str+j) == '\0') // Found a word or reached the end of sentence
{
reverseString( str+i, j-i );
i = j+1;
}
if( *(str+j) == '\0')
{
break;
}
j++;
}
}
void reverseString(char* str, int len)
{
int i, j;
char temp;
i=j=temp=0;
j=len-1;
for (i=0; i<j; i++, j--)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
I did not have time to test this a lot so if there are any mistakes, please let me know.
If you have any questions, please feel free to send me an email at support@mytechinterviews.com. If you have any interview questions which you feel would benefit others, I would love to hear about it.
Related posts:


Little modification – just using one counter and a more elegant length/2:
void reverseString(char* str)
{
puts(str);
int i=0;
char temp;
int length=strlen(str);
for (i=0; i<length/2; i++){
temp=str[i];
printf("CHAR IS %c\n", str[i]);
str[i] = str[length-i-1];
str[length-i-1] = temp;
}
}
static String reverseString(String str) {
char[] strArray = str.toCharArray();
int j = strArray.length - 1;
for (int i = 0; i < j; i++, j--) {
strArray[i] ^= strArray[j];
strArray[j] ^= strArray[i];
strArray[i] ^= strArray[j];
}
return new String(strArray);
}
static String reverseLine(String line) {
String reverseString = reverseString(line);
StringBuffer temp = new StringBuffer();
StringBuffer result = new StringBuffer();
for (int i =0; i 0) {
result.append(reverseString(temp.toString()));
temp.delete(0, temp.length());
}
result.append(reverseString.charAt(i));
} else {
temp.append(reverseString.charAt(i));
}
}
// appends the last string if any
if (temp.length() > 0) {
result.append(reverseString(temp.toString()));
}
return result.toString();
}
nice one…….
danke!