Строки в стиле C в Python - PullRequest
       20

Строки в стиле C в Python

1 голос
/ 21 ноября 2010

Очень популярный вопрос - как перевернуть строку в стиле C?Строка C-Style по определению является строкой, оканчивающейся нулем ('\ 0').Используя C (или, возможно, C ++), можно использовать указатели для манипулирования строкой, чтобы изменить ее содержимое на месте.

Если кто-то задает вопрос: «Как вы переворачиваете строку стиля C в Python? ", какими будут некоторые из возможных ответов?

Спасибо

Ответы [ 4 ]

4 голосов
/ 21 ноября 2010

Если вам нужно «перевернуть строку в стиле C в Python», я думаю, что конечный результат также должен быть строкой в ​​стиле 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.

Надеюсь, это поможет. Если это так, пожалуйста, проголосуйте и примите ответ. Благодарю. : -)

3 голосов
/ 21 ноября 2010

Поскольку C не имеет строкового типа, он представляет символьные строки в виде указателей на char, где последний байт (при условии ASCII, а не широких символов) равен \0.Это представление .Кстати, эта реализация по умолчанию имеет недостаток, заключающийся в том, что \0 не может быть частью такой строки.Если это необходимо, требуется другое представление (например, представление строки в виде указателя + целое число длины).

Python, OTOH имеет строковый тип, и для пользователя непонятно, как этот тип представлен.Следовательно, «строка в стиле C» - бессмысленное понятие в Python.

3 голосов
/ 21 ноября 2010

Python не использует строки в стиле C;Строки Python могут содержать встроенный NUL, поэтому строки в стиле C не используются, а имеют явную длину.

>>> 'abc\0def'[::-1]
'fed\x00cba'
1 голос
/ 21 ноября 2010

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, учитываякак вы можете использовать нулевой символ в качестве временного пространства).

...