簡體   English   中英

Python中的“ C風格”字符串

[英]'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM