新解法之翻转句子中单词的顺序(不用两次翻转,用两个指针)

一句话的单词进行倒置,标点符号不倒换,比如一句话"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/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值