Python:将句子中的单词全部倒排过来,但单词的字母顺序不变
最后更新于:2022-04-01 19:39:46
早上看到好友未央的一篇博文[《一道google的测试工程师笔试题》](http://www.itsbug.com/?p=208),内容如下:
~~~
这是去年面试google测试工程师的一道题,题目如下:
设计一个函数,使用任意语言,完成以下功能:
一个句子,将句子中的单词全部倒排过来,但单词的字母顺序不变。比如,This is a real world,输出结果为world real a is this.
~~~
他用C++很好的封装了一个函数实现了此功能,如下,更多信息请访问:[http://www.itsbug.com/?p=208](http://www.itsbug.com/?p=208)
C++版本:
~~~
#include
#include
using namespace std;
const char *Reverse(char *src);
char *pDst=NULL;
int main(int argc,char **argv)
{
cout << "please input your sentense:" << endl;
char pSrc[100];
memset(pSrc,0,100);
cin.getline(pSrc,100);
cout << Reverse(pSrc) << endl;
if (pDst != NULL)delete pDst;
return 0;
}
const char *Reverse(char *pSrc)
{
char *pPos = pSrc;
int iLen=strlen(pSrc);
pDst = new char[iLen + 1];
memset(pDst,0,iLen+1);
int iCurrentPos = 0;
int iPrePos = 0;
while (pPos)
{
if (pSrc[iCurrentPos] <= 'z' && pSrc[iCurrentPos] >= 'A')
{
iCurrentPos++;
pPos ++;
continue;
}
else
{
int iDistance =iCurrentPos-iPrePos;
for (int i=0;i < iDistance;i++)
{
pDst[iLen - iCurrentPos+i] = pSrc[iPrePos+i];
}
pDst[iLen-iCurrentPos-1]=pSrc[iCurrentPos];
iCurrentPos ++;
}
iPrePos = iCurrentPos;
if (*pPos == '\0')
{
break;
}
else
{
pPos ++;
}
}
return pDst;
}
memset(pDst,0,iLen+1);
int iCurrentPos = 0;
int iPrePos = 0;
while (pPos)
{
if (pSrc[iCurrentPos] <= 'z' && pSrc[iCurrentPos] >= 'A')
{
iCurrentPos++;
pPos ++;
continue;
}
else
{
int iDistance =iCurrentPos-iPrePos;
for (int i=0;i < iDistance;i++)
{
pDst[iLen - iCurrentPos+i] = pSrc[iPrePos+i];
}
pDst[iLen-iCurrentPos-1]=pSrc[iCurrentPos];
iCurrentPos ++;
}
iPrePos = iCurrentPos;
if (*pPos == '\0')
{
break;
}
else
{
pPos ++;
}
}
return pDst;
}
~~~
想了一下,如果此功能使用python来实现的话,可能比较方便,大致思路如下:
1. 将语句中的单词提取出来放入list中;
2. 将list反转;
3. 将反转后的list输出。
实现如下:
python版本:
~~~
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def str_reverse(str_src):
'''
Function:返转单词,以空格或TAB键为间隔符
Input:NONE
Output: NONE
author: socrates
blog:http://blog.csdn.net/dyx1024
date:2012-02-18
'''
#以空格为分隔符,将各单词取出来存放在list中
str_dst = str_src.split()
#反转list
str_dst.reverse()
#返回反转后的list对象
return str_dst
if __name__ == '__main__':
#遍历list,输出内容
for str_out in str_reverse(raw_input("please input your sentense:")):
print str_out,
~~~
测试:
~~~
[root@kevin python_test]# ./str_test.py
please input your sentense:This is a real world
world real a is This
[root@kevin python_test]# ./str_test.py
please input your sentense:中国 陕西 西安
西安 陕西 中国
[root@kevin python_test]#
~~~
';