一个非常受欢迎的问题是如何反转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