翻转句子中单词的顺序。但单词内字符的顺序不变。
例如输入“I am a student." 输出”student. a am I"。
算法:先对整个句子进行翻转,再对每个单词时行一次翻转
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* wordLength(char *stringPtr, int *len, int *flag)
{
assert(stringPtr);
assert(len);
assert(flag);
*len = 0;
while(' ' != *stringPtr && '\0' != *stringPtr)
{
(*len)++;
stringPtr++;
}
if('\0' == *stringPtr)
{
*flag = 0;
}
return stringPtr;
}
void reverse(char *stringPtr, int len)
{
assert(stringPtr);
int iter = 0;
char temp;
int length = len - 1;
while(iter < length)
{
temp = *(stringPtr + iter);
*(stringPtr + iter) = *(stringPtr + length);
*(stringPtr + length) = temp;
iter++;
length--;
}
}
void resultReverse(char *stringPtr, int len)
{
int flag = 1;
int lengthWord;
reverse(stringPtr, len);
while(flag)
{
stringPtr = wordLength(stringPtr, &lengthWord, &flag);
reverse(stringPtr - lengthWord, lengthWord);
while(' ' == *stringPtr)
{
stringPtr++;
}
}
}
int main(void)
{
char arr[] = "I am a student.";
int len = strlen(arr);
resultReverse(arr, len);
printf("%s\n", arr);
return 0;
}