题目
输入:i am a student.
输出:student. a am i
题目分析
先总体反转,然后逐个单词反转,首先,将字符串完全翻转一次,得到.tneduts a ma i。然后设置两个指针,对单词进行翻转,也就是局部翻转.
代码如下:
void AllReverse(char *pStart, char *pEnd)//全反转
{
char pTemp;
if (pStart == NULL || pEnd == NULL)
return;
while (pStart < pEnd)
{
pTemp = *pStart;
*pStart = *pEnd;
*pEnd = pTemp;
pStart++;
pEnd--;
}
}
char *Reverse(char *pData)//单词反转
{
if (pData == NULL)
{
return NULL;
}
char *pStart = pData;
char *pEnd = pData;
while (*pEnd != '\0')
{
pEnd++;
}
pEnd--;
AllReverse(pStart, pEnd);
pStart = pEnd = pData;
while (*pStart != '\0')
{
if (*pStart == ' ')
{
pStart++;
pEnd++;
}
else if (*pEnd == ' ' || *pEnd == '\0')
{
AllReverse(pStart, --pEnd);
pStart = ++pEnd;
}
else
{
pEnd++;
}
}
return pData;
}
int main()//主函数
{
char a_arr[100];
char * str = NULL;
gets_s(a_arr);
str = Reverse(a_arr);
cout << str;
return 0;
}