- 题目描述:
输入:i am a student.
输出:student. a am i
- 分析:
这道题的关键是对字符串的控制,首先,将字符串完全翻转一次,得到
.tneduts a ma i
然后设置两个指针,对单词进行翻转,也就是局部翻转。
- 代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<String,h>
#include<assert.h>
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;
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;
}
void test()
{
char Str[100];
char *NewStr = NULL;
gets(Str);
NewStr = Reverse(Str);
printf("%s\n", NewStr);
}
int main()
{
test();
return 0;
}
- 运行结果: