一句话的单词进行倒置,标点符号不倒换,比如一句话"i come from nanjing"倒换后变成"nanjing from come i".
网上有好多解法,大多数是两次翻转,现我提供一种思路:
可以用两个指针,开始时均指向最后位置,一个向前不断推进,以确定输出区间的起始位置,另一个用来确定输出区间的结束位置,当遇到空格后,输出从起始到结束的区间,然后把向前的指针赋给后面的指针,而前面的指针则继续向前推进,以此循环直到结束。其中会遇到首字符为空或不为空的情况,在while条件中加了判断,我使用的数组下标,指针也行的。
#include <iostream>
using namespace std;
void func(char*a)
{
int len=strlen(a);
int i=len-1;int m=len-1;
while(i>0||((i==0)&&a[0]==' '))
{
if(a[i]==' '&&a[i+1]!=' ')
{
int j=i+1;
while(j<=m)
{
cout<<a[j];
j++;
}
cout<<' ';
m=i-1;
}
i--;
}
while(i==0)
{
if(a[0]!=' ')
{
int j=i;
while(j<=m)
{
cout<<a[j];
j++;
}
}
return;
}
}
void main()
{char a[] ="iyu eou am a students busxn jin ";
func(a);
cout<<endl;
}
这个是两次翻转的解法,很好,值得借鉴
http://zhedahht.blog.163.com/blog/static/254111742007289205219/