Reverse the words of a sentence while keeping their order. For simplicity, assume there are no punctuations.
void ReverseWords(char *arr, int size)
{
if (!arr)
return;
// First reverse the whole array
ReverseArrayRange(arr, 0, size - 1);
// Then reverse back each word
int start = 0;
for (int i = 0; i < size; i++)
{
if (' ' == arr[i])
{
ReverseArrayRange(arr, start, i - 1);
start = i + 1;
}
}
}
void ReverseArrayRange(char *arr, int start, int end)
{
if (!arr)
return;
while (start < end)
{
char temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
} |