Python中的'C风格'字符串
一个非常热门的问题是如何反转一个C风格的字符串。C风格字符串的定义是以一个空字符('\0')结束的字符串。在C语言(或者C++)中,可以使用指针来操作这个字符串,从而在原地反转它的内容。
如果有人问:“在Python中如何反转一个C风格的字符串?”那么可能的回答有哪些呢?
谢谢
4 个回答
3
Python 不像 C 语言那样使用字符串。C 语言的字符串不能包含空字符(NUL),而 Python 的字符串可以包含空字符,所以 Python 采用的是一种明确的长度来表示字符串,而不是 C 语言那种方式。
>>> 'abc\0def'[::-1]
'fed\x00cba'
3
因为C语言没有字符串这种类型,所以它用指向char
的指针来表示字符字符串。在这个字符串的最后一个字节(假设是ASCII编码,而不是宽字符)是\0
,这个\0
是用来表示字符串的结束的。这只是一种表示方式。顺便说一下,这种默认的表示方法有个缺陷,就是\0
不能作为字符串的一部分。如果需要包含它,就得用其他的表示方法,比如用一个指针加上一个长度的整数来表示字符串。
而Python就不一样了,它有自己的字符串类型,用户并不知道这个类型是怎么实现的。因此,在Python中,“C风格字符串”这个概念是没有意义的。
5
如果你想在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中,“就地反转字符串”的概念是无法实现的。
希望这对你有帮助。 如果有帮助,请点赞并接受这个回答。谢谢。:-)