цель c - удалить последний символ из строки

<p>в objective c для iphone, как мне удалить последний символ строки, используя действие кнопки.</p>

<p>в вашем классе контроллера создайте метод действия, к которому вы подключите кнопку в интерфейсном разработчике. внутри этого метода вы можете обрезать вашу строку следующим образом:</p><p><br></p><pre><code>if ([string length] > 0) { string = [string substringtoindex:[string length] - 1]; } else { //no characters to delete... attempting to do so will result in a crash } </code></pre><p><br> <br> <br> <br></p><hr><p>если вам нужен причудливый способ сделать это всего за одну строку кода, вы можете написать его так:</p><pre><code>string = [string substringtoindex:string.length-(string.length>0)]; </code></pre><hr><p>* объяснение необычного фрагмента кода из одной строки:<br> <br> если есть символ для удаления (то есть длина строки больше 0)<br> <code>(string.length>0)</code> возвращает <code>1</code>, поэтому код возвращается:<br> <code>string = [string substringtoindex:string.length-1];</code><br> <br> если нет символа для удаления (т.е. длина строки не больше 0)<br> <code>(string.length>0)</code> возвращает <code>0</code>, поэтому код возвращается:<br> <code>string = [string substringtoindex:string.length-0];</code><br> что предотвращает сбои.</p>

<p>если это nsmutablestring (который я бы порекомендовал, поскольку вы меняете его динамически), вы можете использовать:</p><pre><code>[mystring deletecharactersinrange:nsmakerange([myrequeststring length]-1, 1)]; </code></pre>

<p>приведенные здесь решения на самом деле не учитывают многобайтовые символы юникода ("составные символы") и могут привести к недопустимым строкам юникода.</p><p>фактически, заголовочный файл ios, который содержит объявление <code>substringtoindex</code>, содержит следующий комментарий:</p><blockquote> <p>подсказка: используйте с rangeofcomposedcharacterseptionsforrange: чтобы не разбивать составные символы</p> </blockquote><p>смотрите <a href="https://stackoverflow.com/a/11760778/1071136">как использовать <code>rangeofcomposedcharactersequenceatindex:</code></a> чтобы правильно удалить последний символ.</p>

<p>документация - ваш друг, <code>nsstring</code> поддерживает вызов <code>substringwithrange</code>, который может сократить строку, если у вас есть возвращенная сокращенная строка. вы не можете изменить экземпляр <code>nsstring</code>, который является неизменным. если у вас есть <code>nsmutablestring</code>, есть метод с именем <code>deletecharactersinrange</code>, который может изменить строку на месте</p><pre><code>... nsrange r; r.location = 0; r.size = [mutable length]-1; nsstring* shorted = [stringvalue substringwithrange:r]; ... </code></pre>