Правильный способ очистить C-строку
Мне интересно, каким будет правильный способ очистить строку в C. Будет ли это так?
4 ответов
Это зависит от того, что вы подразумеваете под «пустым». Если вы просто хотите строку нулевой длины, то ваш пример будет работать.
Это также будет работать:
Если вы хотите обнулить все содержимое строки, вы можете сделать это так:
но это будет работать только для обнуления до первого нулевого символа.
если строка является статическим массивом, вы можете использовать:
два других способа strcpy(str, «»); и string[0] = 0
чтобы действительно удалить содержимое переменной (в случае, если у вас есть грязный код, который не работает должным образом с фрагментами выше :P), используйте цикл, как в примере ниже.
Если вы хотите очистить динамический выделенный массив символов с самого начала, вы можете использовать комбинацию malloc () и memset() или — и это намного быстрее-calloc (), который делает то же самое, что и malloc, но инициализирует весь массив с нулем.
наконец — то я хочу, чтобы вы имели в виду свою среду выполнения. Более того, если вы обрабатываете огромные массивы (6 цифр и выше), вы должны попытаться установить первое значение в Null вместо запуска memset() через всю строку.
сначала это может выглядеть грязнее, но намного быстрее. Вам просто нужно обратить больше внимания на свой код;)
надеюсь, это было полезно для всех;)
зависит от того, что вы подразумеваете под опорожнять. Если вы просто хотите пустую строку, вы можете сделать
Если вы хотите установить каждый элемент в ноль, сделайте
требуется имя строки и ее длина будет ноль всех символов другие методы могут остановиться на первом нуле, с которым они сталкиваются
Методы-модификаторы строки
Класс string содержит большое количество функций-членов (методов) для изменения строки. Этих функций гораздо больше, чем в других контейнерах. Объясняется это тем, что данные методы обеспечивают тот необходимый функционал, который соответствует функционалу для работы с C-строкой. Эти методы, в совокупности, называются модификаторами, так как они изменяют символьный массив различным образом. С точки зрения эффективности, эти методы могут влиять на производительность программы негативно, так как в результате может произойти прераспределение памяти (см. предыдущий урок). Нужно тщательно взвесить, стоит ли использовать в своей программе тот или иной метод. Например, в задаче 19.8 мы использовали временную строку для получения результата. Однако, если использовать, для решения задачи метод insert() , применяемый к исходной строке, то вы бы получили чрезвычайно медленно работающую программу (на каждом шаге цикла происходило бы смещение элементов с копированием новых, а это не эффективно). Рассмотреть всё разнообразие работы с этими методами, в рамках нашего курса, не представляется возможном.
replace
Этот модификатор заменяет в исходной строке подстроку строкой или указанным диапазоном. Подстрока замены не обязательно должна иметь тот же размер, что и заменяемая подстрока.
1. Замена подстроки, указанную диапазоном [pos, pos + count) , на строку other_str ( other_str может быть как объектом класса string , так и C-строкой):
или с указанием диапазона из other_str
2. Подстроку для замены можно получить и с помощью итераторов:
3. Наконец, можно заменить count символами ch :
Программа 8 В заданной строке поменять местами первое и последнее слово строки. Разделителями слов считаются пробелы.
String. Remove Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает новую строку, в которой удалено указанное число знаков текущей строки.
Перегрузки
Возвращает новую строку, в которой было удалено указанное число символов в указанной позиции.
Возвращает новую строку, в которой были удалены все символы, начиная с указанной позиции и до конца в текущем экземпляре.
Remove(Int32, Int32)
Возвращает новую строку, в которой было удалено указанное число символов в указанной позиции.
Параметры
Отсчитываемая от нуля позиция, с которой начинается удаление знаков.
Число символов для удаления.
Возвращаемое значение
Новая строка, эквивалентная данному экземпляру за минусом удаленных знаков.
Исключения
Значение параметра startIndex или count меньше нуля.
startIndex плюс count указывает позицию за пределами этого экземпляра.
Примеры
В следующем примере показано, как удалить отчество из полного имени.
Комментарии
В платформа .NET Framework строки основаны на нулях. Значение startIndex параметра может варьироваться от нуля до одного меньше длины экземпляра строки.
Этот метод не изменяет значение текущего экземпляра. Вместо этого она возвращает новую строку, в которой было удалено число символов, указанных параметром count . Символы удаляются в позиции, указанной в параметре startIndex .
См. также раздел
Применяется к
Remove(Int32)
Возвращает новую строку, в которой были удалены все символы, начиная с указанной позиции и до конца в текущем экземпляре.
Параметры
Отсчитываемая от нуля позиция, с которой начинается удаление знаков.
Возвращаемое значение
Новая строка, эквивалентная данной строке за минусом удаленных знаков.
Исключения
Значение параметра startIndex меньше нуля.
startIndex указывает положение, которое находится за пределами этой строки.
Примеры
В следующем примере демонстрируется Remove метод. Следующий к последнему регистру удаляет весь текст, начиная с указанного индекса, через конец строки. Последний случай удаляет три символа, начиная с указанного индекса.
Комментарии
В платформа .NET Framework строки основаны на нулях. Значение startIndex параметра может варьироваться от нуля до одного меньше длины экземпляра строки.
Этот метод не изменяет значение текущего экземпляра. Вместо этого она возвращает новую строку, в которой все символы из позиции startIndex в конец исходной строки были удалены.