一個非常受歡迎的問題是如何反轉C風格的字符串。根據定義,C風格字符串是一個由null('\ 0')終止的字符串。使用C(或者C++),可以使用指針來操縱字符串以便在原地顛倒其內容。Python中的'C風格'字符串
如果有人問這個問題:「你如何在Python中反轉C風格的字符串?」,那麼可能的答案是什麼?
謝謝
一個非常受歡迎的問題是如何反轉C風格的字符串。根據定義,C風格字符串是一個由null('\ 0')終止的字符串。使用C(或者C++),可以使用指針來操縱字符串以便在原地顛倒其內容。Python中的'C風格'字符串
如果有人問這個問題:「你如何在Python中反轉C風格的字符串?」,那麼可能的答案是什麼?
謝謝
如果您需要「在Python中反轉C風格的字符串」,我認爲最終結果也必須是c風格的字符串。
這就是我如何理解這個問題,但是上面的回答做不是支持這個。
請參見下面的交互式會話:
>>>
>>> original = "abc\0"
>>> finish_correct = "cba\0"
>>> original
'abc\x00'
>>> finish_correct
'cba\x00'
>>>
>>> answer = original[:-1] # remove final null
>>> answer = answer[::-1] # reverse string
>>> # Extended slice syntax: [begin:end:step]
>>> # So, [::-1] means take whole string, but in reverse.
>>> answer
'cba'
>>> answer = answer + "\0"
>>> answer
'cba\x00'
>>> answer == finish_correct
True
還要注意,Python中的字符串是不可改變的。這意味着他們永遠不能改變。您可以創建分配給相同變量名稱的新字符串,但給定字符串的內存映像永遠不會更改。因此,「在位反轉字符串」的概念不能在Python中發生。
希望這會有所幫助。如果是這樣,請投票並接受答案。謝謝。 :-)
@sc_ray這是否回答你的問題? – nonot1 2010-11-22 04:34:02
很好的回答。謝謝! – 2010-11-22 11:11:47
Python不使用C風格的字符串; Python字符串可以包含嵌入的NUL,因此不使用C風格的字符串,而是使用明確的長度。
>>> 'abc\0def'[::-1]
'fed\x00cba'
謝謝。你能在這裏解釋你的片段嗎?您所指的嵌入式NUL是否是'\ 0'? – 2010-11-21 15:31:08
它使用擴展切片從源序列的開始到結尾返回一個序列,但是順序相反。字符串中的'\ 0'確實是一個嵌入的NUL。 http://docs.python.org/release/2.3.5/whatsnew/section-slices.html – 2010-11-21 15:35:37
''abc \ 0def''不是c風格的字符串,也不是'fed \ x00cba''。 – martineau 2010-11-21 17:15:05
因爲C沒有字符串類型,它代表字符串作爲指針char
,其中最後一個字節(假設ASCII,不寬字符)是\0
。這是表示。順便說一句,這個默認的實現有一個缺陷,即\0
不能成爲這樣一個字符串的一部分。如果需要,則需要不同的表示形式(例如將字符串表示爲指針+長度整數)。
Python,OTOH有一個字符串類型,它對用戶來說是不透明的,這種類型如何表示。因此,「C風格的字符串」在Python中是一個沒有意義的概念。
python字符串是immutable。你可以模擬一個帶有字符表的c樣式字符串,但我不明白爲什麼你會打擾。但是如果你確實有一個c字符串(即字符表),那麼你需要做的就是用s [len(s)-i-1]交換s [i]:
for i in range(0,len(a)-2):
a[i],a[len(a)-1-i]=a[len(a)-1-i],a[i]
(如果是你的C風格的字符串)
注意你怎麼不需要一個臨時變量(當然你不需要一個是C或者,考慮瞭如何使用空字符作爲臨時空間)。
你對Python中「C風格字符串」的定義是什麼?一個尾隨'\ x00'的Python字符串?或者來自C擴展的東西? – 2010-11-21 15:09:59