例如:
“I am from BeiJing”倒置为“BeiJing from am I”
方法1:先将每个单词翻转,然后翻转整个句子
#include <iostream>
using namespace std;
void Revese(char *str){
char* start = str;//开头
char* end = str;//结尾
char* ptr = str;//中间指针
while (*ptr++)
{
if (*ptr == ' ' || *ptr == '\0') //找到一个单词
{
end = ptr-1; //end指向单词末尾
while (start<end)
swap(*start++,*end--); //把单词的字母逆置
start = end = ptr + 1; //指向下一个单词开头
}
}
start = str;//start指向字符串开头
end = ptr-2;//end指向字符串末尾
while (start < end)
{
swap(*start++, *end--);
}
}
int main()
{
char str[100] = "I am from BeiJing";
Revese(str);
cout << str << endl;
getchar();
return 0;
}
#include <iostream>
using namespace std;
void Revese(char *str){
char* start = str;
char* end = str;
char* ptr = str;
while (*ptr++)
;
end = ptr-2; //找到字符串末尾
while (start < end)
{
swap(*start++,*end--);//将整个字符串逆置
}
start = str;//指向字符串开头
end = ptr-2;//指向字符串末尾
ptr = start;//指向字符串开头
while (*ptr++)
{
if (*ptr== ' ' || *ptr == '\0') //找到一个单词
{
end = ptr-1;//指向单词末尾
while (start<end)
{
swap(*start++,*end--);
}
start = end = ptr + 1;//指向下一个单词开头
}
}
}
int main()
{
char str[100]="I am from BeiJing";
Revese(str);
cout<<str<<endl;
getchar();
return 0;
}
方法三:C语言版
#include <stdio.h>
void reverse(char *pBegin,char *pEnd)
{
if(pBegin == NULL || pEnd == NULL)
return;
while(pBegin < pEnd)
{
char temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
pBegin++;
pEnd--;
}
}
char* reverseSentence(char *pData)
{
char *pBegin = pData;
char *pEnd = pData;
while(*pEnd++)
;
reverse(pBegin,pEnd-2);
pBegin = pEnd = pData;
while(*pBegin)
{
if(*pBegin == ' ')
{
pBegin++;
pEnd++;
}
else if(*pEnd == ' ' || *pEnd == '\0')
{
reverse(pBegin,--pEnd);
pBegin = ++pEnd;
}
else
{
pEnd++;
}
}
return pData;
}
int main()
{
char p[] = "I am a student.";
char *p1 = reverseSentence(p);
printf("%s\n",p1);
}