[英]'C-style' strings in Python
一個非常普遍的問題是如何反轉C樣式字符串。 根據定義,C樣式字符串是一個以null('\\ 0')結尾的字符串。 使用C(或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中不會發生。
希望這可以幫助。 如果是這樣,請投票並接受答案。 謝謝。 :-)
Python不使用C樣式的字符串。 Python字符串可以包含嵌入式NUL,因此不使用C樣式的字符串,而是使用顯式的長度。
>>> 'abc\0def'[::-1]
'fed\x00cba'
由於C沒有字符串類型,因此它將字符串表示為char
指針,其中最后一個字節(假定為ASCII,不是寬字符)為\\0
。 這是一種表示 。 順便說一下,此默認實現的缺點是\\0
不能是這樣的字符串的一部分。 如果需要,則需要使用其他表示形式(例如,將字符串表示為指針+長度整數)。
Python,OTOH具有字符串類型,並且對於用戶而言,如何表示這種類型是不透明的。 因此,“ C樣式字符串”在Python中是沒有意義的概念。
Python字符串是不可變的 。 您可以使用一個字符表來模擬C樣式的字符串,但是我不明白您為什么要打擾。
但是,如果您確實有C風格的“字符串”(即字符表),那么您要做的就是將s [i]與s [len(s)-i-1]交換:
for i in range(0, len(a) - 2):
a[i], a[len(a) - 1 - i] = a[len(a) - 1 - i], a[i]
(如果a是您的C樣式字符串)
請注意,您不需要臨時變量(考慮到如何將空字符用作臨時空間,也可以在C中不需要臨時變量)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.