1. 程式人生 > >python 字串中各單詞翻轉,保留單詞之間空格個數

python 字串中各單詞翻轉,保留單詞之間空格個數

    如下字串:“wo shi   zhong guo ren”, 翻轉後期望輸出:“ren guo zhong   shi wo”,shi和zhong之間有兩個空格,其餘單詞之間一個空格。

    用C/C++來實現的話,可以讓字串整體翻轉成,"ner oug gnohz  ihs ow",然後再將每個單詞翻轉,結果為“ren guo zhong   shi wo”

    C/C++程式碼如下:

#include<iostream>
using namespace std; 

void reverse_str(char *pstr)
{
	if(NULL == pstr)
	{
		return;
	}

	char *pstart = pstr, *pcur = pstr, *pend = NULL;

	while (*pcur++ != '\0');
	pend = pcur - 2;  //減1指向字串結束符,再減1指向字串結尾

	while (pstart < pend)
	{
		swap(*pstart++, *pend--);
	}

        pcur = pstr;
	pstart = pstr;

	while(*pcur++ != '\0')
	{
		if((*pcur == ' ') || (*pcur == '\0'))
		{
			pend = pcur -1;
			while(pstart < pend)
			{
				swap(*pstart++, *pend--);
			}
		
			pstart = pcur + 1;	
		}
	}

	return;
}

void main()
{
	char str[] = "wo shi   zhong guo ren";
	cout << str << "\n";
	reverse_str(str);
	cout << str << "\n";

	return;
}

結果:

wo shi   zhong guo ren
ren guo zhong   shi wo
請按任意鍵繼續. . .

用python實現的話,考慮將每個單詞和空格都存在列表中,然後將列表反轉,並組合成一個字串,如下:

#!/usr/bin/python  
# -*- coding: utf-8 -*-  

import re

str = 'wo shi   zhong guo ren'
str_split = re.split('(\s+)', str)
str_split.reverse()
print "".join(str_split)
    結果: 
ren guo zhong   shi wo
split的規則加括號的話,是將匹配到的規則也保留在列表中, reverse是反轉列表,然後用""和join方法將列表連線成字串。