Empty string что это
empty string
Смотреть что такое «empty string» в других словарях:
Empty string — In computer science and formal language theory, the empty string (or null string)[1] is the unique string of length zero. It is denoted with λ or sometimes Λ or ε. The empty string is distinct from a null reference in that in an object oriented… … Wikipedia
String (computer science) — In formal languages, which are used in mathematical logic and theoretical computer science, a string is a finite sequence of symbols that are chosen from a set or alphabet. In computer programming, a string is traditionally a sequence of… … Wikipedia
String operations — In computer science, in the area of formal language theory, frequent use is made of a variety of string functions; however, the notation used is different from that used on computer programming, and some commonly used functions in the theoretical … Wikipedia
Empty Walls — Single infobox Name = Empty Walls Artist = Serj Tankian from Album = Elect the Dead Released = September 10 2007 (Internet) October 15 [ [http://www.manchestereveningnews.co.uk/entertainment/music/single reviews/s/1020596 serj tankian empty walls … Wikipedia
empty — 1. adjective /ɛmptiː/ a) devoid of content b) Containing no elements (as of a string or array), opposed to being null (having no valid value). Syn: clean … Wiktionary
Empty [null] string — Пустая строка … Краткий толковый словарь по полиграфии
Comparison of programming languages (string functions) — String functions redirects here. For string functions in formal language theory, see String operations. Programming language comparisons General comparison Basic syntax Basic instructions Arrays … Wikipedia
Magic string — A magic string is an input that a programmer believes will never come externally and which activates otherwise hidden functionality. A user of this program would likely provide input that gives an expected response in most situations. However, if … Wikipedia
Six-String Samurai — film poster Directed by Lance Mungia Produced by … Wikipedia
The Incredible String Band (альбом) — The Incredible String Band студийный альбом The Incredible String Band Дата выпуска июнь 1966 Записан … Википедия
The Incredible String Band (album) — Infobox Album | Name = The Incredible String Band Type = Studio album Artist = The Incredible String Band Caption = The original UK cover of the album, showing Clive Palmer, Robin Williamson, and Mike Heron Released = June 1966 Recorded = May… … Wikipedia
Строки в языке C++ (класс string)
В языке C++ для удобной работы со строками есть класс string, для использования которого необходимо подключить заголовочный файл string.
Строки можно объявлять и одновременно присваивать им значения:
string S1, S2 = «Hello»;
Строка S1 будет пустой, строка S2 будет состоять из 5 символов.
Строки в языке C++ могут
Конструкторы строк
Конструкторы можно вызывать явно, например, так:
Неявно конструктор вызывается при объявлении строки с указанием дополнительных параметров. Например, так:
Подробней о конструкторах для строк читайте здесь.
Ввод-вывод строк
Строка выводится точно так же, как и числовые значения:
cout >» для объекта cin:
Можно считывать строки до появления символа конца строки при помощи функции getline. Сам символ конца строки считывается из входного потока, но к строке не добавляется:
Арифметические операторы
Подробней о методе resize.
clear
Подробней о методе clear.
empty
Подробней о методе empty.
push_back
Подробней о методе push_back.
append
Добавляет в конец строки несколько символов, другую строку или фрагмент другой строки. Имеет много способов вызова.
Подробней о методе append.
erase
Подробней о методе erase.
insert
Подробней о методе insert.
substr
Подробней о методе substr.
replace
Заменяет фрагмент строки на несколько равных символов, другую строку или фрагмент другой строки. Способы вызова аналогичны способам вызова метода append, только первыми двумя параметрами являются два числа: pos и count. Из данной строки удаляется count символов, начиная с символа pos, и на их место вставляются новые символы.
Подробней о методе replace.
Подробней о методе find.
rfind
Ищет последнее вхождение подстроки («правый» поиск). Способы вызова аналогичны способам вызова метода find.
Подробней о методе rfind.
find_first_of
Ищет в данной строке первое появление любого из символов данной строки str. Возвращается номер этого символа или значение string::npos.
find_last_of
Ищет в данной строке последнее появление любого из символов данной строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
Подробней о методе find_last_of.
find_first_not_of
Ищет в данной строке первое появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
find_last_not_of
Ищет в данной строке последнее появление символа, отличного от символов строки str. Способы вызова и возвращаемое значение аналогичны методу find_first_of.
c_str
Возвращает указать на область памяти, в которой хранятся символы строки, возвращает значение типа char*. Возвращаемое значение можно рассматривать как C-строку и использовать в функциях, которые должны получать на вход C-строку.
Разница между string.empty и string [0] == ‘\ 0’
Предположим, у нас есть строка
Решение
C ++ 11 и выше
Pre-C ++ 11
string_variable.empty() с другой стороны, возвращает true, если строка пуста, и false, если это не так; поведение не будет неопределенным.
Резюме
empty() предназначен для проверки, является ли строка / контейнер пустой или нет. Работает на всех контейнерах, которые его предоставляют и используют empty четко указывает ваше намерение — что очень много значит для людей, читающих ваш код (включая вас).
Другие решения
Другие ответы здесь на 100% правильные. Я просто хочу добавить еще три заметки:
empty является общим (каждый контейнер STL реализует эту функцию), в то время как operator [] с size_t работает только со строковыми объектами и массивами. при работе с общим кодом STL, empty является предпочтительным.
также существует потеря производительности. empty обычно реализуется путем сравнения размера элемента строки с нулем, что очень дешево, легко встроить и т. д. сравнение с первым символом может быть более тяжелым. прежде всего, поскольку все строки реализуют оптимизация коротких строк, Сначала программа должна спросить, находится ли строка в «коротком режиме» или «длинном режиме». ветвление — худшая производительность. если строка длинная, разыменование может быть дорогостоящим, если строка «игнорировалась» в течение некоторого времени, а сама разыменование может вызвать ошибку кэша, которая является дорогостоящей.
empty () не реализован, поскольку ищет наличие нулевого символа в позиции 0, его просто
Который может быть другим
Также остерегайтесь функций, которые вы будете использовать, если используете C ++ 11 или более позднюю версию:
Размер str составляет 3 байта.
Размер ул 3 длинных.
Размер str 0 длинный.
C ++ строка имеет понятие о том, является ли она пустой или нет. Если строка пуста, то str [0] не определено. Только если строка C ++ имеет размер> 1, определяется str [0].
str [i] == ‘\ 0’ — это концепция стиля C-строки. В реализации C-строки последний символ строки — ‘\ 0’, чтобы отметить конец C-строки.
Для C-строки вам обычно приходится «запоминать» длину вашей строки с помощью отдельной переменной. В C ++ String вы можете назначить любую позицию с помощью ‘\ 0’.
В С# следует ли использовать string.Empty или String.Empty или «» для инициализации строки?
В С# я хочу инициализировать строковое значение пустой строкой.
Как мне это сделать? Каков правильный путь и почему?
ОТВЕТЫ
Ответ 1
Используйте все, что вы и ваша команда найдете наиболее читаемыми.
Аргумент, что «» и » » легко ошибаются друг для друга, на самом деле не стирается. Если вы не используете пропорциональный шрифт (и я не работал с разработчиками, которые это делают), довольно легко понять разницу.
Ответ 2
Код С#
Код IL
Код сборки
Ответ 3
Основной характер кодирования заключается в том, что наша задача, как программисты, состоит в том, чтобы признать, что каждое принятое нами решение является компромиссом. [. ] Начните с краткости. Увеличьте другие размеры, необходимые при тестировании.
Ответ 4
Посмотрите эту ссылку для получения дополнительной информации: строка-пусто-против-пусто-цитаты
Ответ 5
Ответ 6
Я не собирался звонить, но я вижу неправильную информацию, которую выбрасывают здесь.
Как уже отмечали некоторые другие, между string.Empty и string.Empty нет никакой разницы.
Кроме того, и это малоизвестный факт, использование «вполне приемлемо. Каждый экземпляр объекта» «в других средах создает объект. Тем не менее,.NET ставит свои строки, поэтому будущие экземпляры будут вытаскивать одну и ту же неизменяемую строку из внутреннего пула, и любое поражение производительности будет незначительным. Источник: Брэд Абрамс.
Ответ 7
Я лично предпочитаю «», если нет веской причины для чего-то более сложного.
Ответ 8
Ответ 9
Почти каждый разработчик знает, что означает «». Я лично столкнулся со String.Empty в первый раз и должен был потратить некоторое время на поиск google, чтобы выяснить, действительно ли они являются тем же самым.
Ответ 10
Эта тема довольно старая и длинная, поэтому извините меня, если это поведение было упомянуто где-то в другом месте. (И укажите мне ответ, который охватывает это)
Я нашел разницу в поведении компилятора, если вы используете string.Empty или двойные кавычки. Разница проявляется, если вы не используете строковую переменную, инициализированную с помощью string.Empty или с двойными кавычками.
никогда не выделяется, а в случае инициализации двойными кавычками вы получаете ожидаемое сообщение.
В принципе, если я правильно понимаю, они хотят позволить программисту установить переменную с возвращаемым значением функции для целей отладки, не беспокоя его предупреждающим сообщением, и поэтому они ограничивают это предупреждение только в случае назначения затрат и string.Empty не является константой, а полем.
Ответ 11
Я выполнил этот очень простой тест, используя следующую функцию в консольном приложении:
Ответ 12
Любое из приведенных выше.
Есть много, много лучших вещей для понтификата. Например, какая цветная кора лучше всего подходит дереву, я думаю, что расплывчатый коричневый с оттенками моллюска.
Ответ 13
Я сильно предпочитаю String.Empty, помимо других причин, чтобы убедиться, что вы знаете, что это такое, и что вы случайно не удалили содержимое, но прежде всего для интернационализации. Если я вижу строку в кавычках, то мне всегда нужно задаться вопросом, является ли это новым кодом, и его следует поместить в таблицу строк. Поэтому каждый раз, когда код изменяется или просматривается, вам нужно искать «что-то в кавычках», и да, вы можете отфильтровать пустые строки, но я говорю людям, что хорошая практика никогда не ставить строки в кавычки, если вы не знаете, что они не будут локализованы.
Ответ 14
Никто не упоминал, что в VisualStudio String по-разному кодируется цвет, а затем строка. Это важно для читаемости. Кроме того, нижний регистр обычно используется для vars и типа, но не большой, но String.Empty является константой, а не var или type.
Ответ 15
Я не понимаю. Последнее самое быстрое: #
Ответ 16
Значения также идентичны: string.Empty == String.Empty == «»
Итак, если бы я был вашим начальником, вы писали бы string.Empty
Ответ 17
p.s. Я все время борюсь с такими «правильными».
Ответ 18
Ответ 19
Любой из первых двух был бы приемлемым для меня. Я бы избегал последнего, потому что относительно легко ввести ошибку, поставив пробел между кавычками. Эта конкретная ошибка будет трудно найти по наблюдению. Предполагая отсутствие опечаток, все семантически эквивалентны.
Ответ 20
Я всегда использую имена типа BCL при доступе к статическим методам, свойствам и полям: String.Empty или Int32.TryParse(. ) или Double.Epsilon
Я всегда использую ключевые слова С# при объявлении новых экземпляров: int i = 0; или string foo = «bar»;
Я редко использую необъявленные строковые литералы, так как мне нравится сканировать код, чтобы объединить их в многократно используемые константы. Компилятор в любом случае заменяет константы литералами, поэтому это скорее способ избежать магических строк/чисел и дать им немного больше смысла с именем. Плюс изменение значений проще.
Ответ 21
Ответ 22
Я лично стал свидетелем «», что привело к (второстепенным) проблемам дважды. Однажды была из-за ошибки младшего разработчика, нового для командного программирования, а другая была простой опечаткой, но факт заключается в использовании string.Empty избежал бы обеих проблем.
Да, это очень важный вызов, но когда язык дает вам несколько способов сделать что-то, я склоняюсь к тому, который имеет наибольший контроль над компилятором и самое сильное применение во время компиляции. Это не «». Все это касается выражения конкретных намерений.
Если вы наберете string.EMpty или Strng.Empty, компилятор сообщит вам, что вы сделали это неправильно. Немедленно. Он просто не будет компилироваться. Как разработчик вы ссылаетесь на конкретное намерение, что компилятор (или другой разработчик) никоим образом не может неверно интерпретироваться, а когда вы делаете это неправильно, вы не можете создать ошибку.
Если вы наберете «, когда имеете в виду» » или наоборот, компилятор с радостью сделает то, что вы ему сказали. Другой разработчик может или не сможет понять ваши конкретные намерения. Создан баг.
Задолго до string.Empty было то, что я использовал стандартную библиотеку, которая определяла константу EMPTY_STRING. Мы по-прежнему используем эту константу в операторах case, где string.Empty не разрешено.
По возможности, поставите компилятор для работы на вас и устраните возможность человеческой ошибки, независимо от того, насколько она мала. ИМО, это превосходит «читаемость», как цитировали другие.
Специфичность и компиляция времени. Это то, что на ужин.
Ответ 23
Компилятор должен сделать их одинаковыми в долгосрочной перспективе. Выберите стандарт, чтобы ваш код был легко читаемым и придерживался его.
Ответ 24
Я просто смотрел на какой-то код, и этот вопрос появился у меня в голове, который я прочитал некоторое время назад. Это, безусловно, вопрос читаемости.
Рассмотрим следующий код С#.
Я лично считаю последнее менее двусмысленным и более легким для чтения.
Как отмечают другие, фактические различия незначительны.
Ответ 25
Ответ 26
Я думаю, что второе является «правильным», но, честно говоря, я не думаю, что это будет иметь значение. Компилятор должен быть достаточно умным, чтобы скомпилировать любой из них в тот же самый байт-код. Я использую «сам».
Ответ 27
Ответ 28
Ответ 29
В то время как разница очень, очень немного, разница все еще существует.
В C # я должен использовать string.Empty или String.Empty или «» для инициализации строки?
В C # я хочу инициализировать строковое значение пустой строкой.
Как мне это сделать? Каков правильный путь и почему?
Используйте то, что вы и ваша команда считаете наиболее читабельным.
Аргумент, что «» и » » их легко принять друг за друга, на самом деле меня не касается. Если вы не используете пропорциональный шрифт (а я не работал ни с одним из разработчиков), довольно легко заметить разницу.
Там действительно нет никакой разницы с точки зрения производительности и кода. При тестировании производительности они переходили туда-сюда, между которыми один был быстрее другого, и только на миллисекунды.
Код C #
IL код
Код сборки
Фундаментальный характер кодирования заключается в том, что наша задача как программистов состоит в том, чтобы признать, что каждое принятое нами решение является компромиссом. […] Начните с краткости. Увеличьте другие размеры в соответствии с требованиями тестирования.
Единственное отличие состоит в том, что если вы используете switch-case синтаксис, вы не можете писать, case string.Empty: потому что это не константа. Вы получаете Compilation error : A constant value is expected
Посмотрите на эту ссылку для получения дополнительной информации: строка-пусто-против-пусто-цитаты
Я не собирался вмешиваться, но я вижу, что здесь выкидывают какую-то неправильную информацию.
Я лично предпочитаю «», если нет веских причин для чего-то более сложного.
Так далеко как «» касается этого, я не совсем уверен.
Почти каждый разработчик знает, что означает «». Я лично столкнулся со String.Empty в первый раз, и мне пришлось потратить некоторое время на поиск в Google, чтобы выяснить, действительно ли это одно и то же.
Эта тема довольно старая и длинная, поэтому извините, если это поведение было упомянуто где-то еще. (И укажите мне на ответ, который охватывает это)
Я нашел разницу в поведении компилятора, если вы используете string.Empty или двойные кавычки. Разница проявляется, если вы не используете строковую переменную, инициализированную string.Empty или двойными кавычками.
В случае инициализации с string.Empty последующим предупреждением компилятора
никогда не генерируется, в то время как в случае инициализации двойными кавычками вы получаете ожидаемое сообщение.
По сути, если я правильно понял, они хотят позволить программисту установить переменную с возвращаемым значением функции для целей отладки, не отвлекая его предупреждающим сообщением, и, таким образом, они ограничивают предупреждение только в случае присваиваний и строк. Пусто не константа, а поле.
Я выполнил этот очень простой тест, используя следующий метод в консольном приложении:
Любой из вышеперечисленных.
Есть много, много лучших вещей для изучения. Например, какой цвет коры подходит к дереву лучше всего, я думаю, что смутно-коричневый с оттенками мха Дульсет.
string это синоним для System.String типа, они идентичны.
Значения также идентичны: string.Empty == String.Empty == «»
Итак, если бы я был вашим начальником, вы бы написали string.Empty
Я не имею никакого значения. Последний самый быстрый, чтобы напечатать хотя 🙂
PS Я все время борюсь с этим «что правильно».
Я всегда использую имена BCL Type при доступе статические методы, свойства и поля: String.Empty или Int32.TryParse(. ) или Double.Epsilon
Я всегда использую ключевые слова C # при объявлении новых экземпляров: int i = 0; или string foo = «bar»;
Я редко использую необъявленные строковые литералы, так как мне нравится иметь возможность сканировать код, чтобы объединить их в повторно используемые именованные константы. В любом случае компилятор заменяет константы на литералы, так что это скорее способ избежать магических строк / чисел и придать им немного больше значения с помощью имени. Плюс изменить значения проще.
Я использую третий, но из двух других первый кажется менее странным. Строка является псевдонимом для String, но, видя их в задании, не имеет смысла.
Любой из первых двух будет приемлем для меня. Я бы избежал последнего, потому что относительно легко ввести ошибку, поместив пробел между кавычками. Эту конкретную ошибку было бы трудно обнаружить наблюдением. При условии отсутствия опечаток, все семантически эквивалентны.
Я лично был свидетелем «», приводящего к (незначительным) проблемам дважды. Однажды это произошло из-за ошибки начинающего разработчика, плохо знакомого с командным программированием, а другая была простой опечаткой, но факт использовал string.Empty избежал бы обеих проблем.
Да, это в значительной степени суждение, но когда язык дает вам несколько способов сделать что-то, я склоняюсь к тому, который обладает наибольшим контролем над компилятором и самым сильным соблюдением времени компиляции. Это не «». Это все о выражении конкретных намерений.
Если вы введете string.EMpty или Strng.Empty, компилятор сообщит вам, что вы ошиблись. Немедленно. Он просто не скомпилируется. Как разработчик, вы ссылаетесь на конкретное намерение, которое компилятор (или другой разработчик) не может никоим образом неверно истолковать, а если вы сделаете это неправильно, вы не сможете создать ошибку.
Если вы наберете «», когда имеете в виду «» или наоборот, компилятор с радостью сделает то, что вы сказали. Другой разработчик может или не сможет найти ваши конкретные намерения. Ошибка создана.
Задолго до string.Empty я использовал стандартную библиотеку, которая определяла константу EMPTY_STRING. Мы по-прежнему используем эту константу в операторах case, где string.Empty не допускается.
Когда бы ни было возможно, заставьте компилятор работать на вас, и исключите возможность человеческой ошибки, независимо от того, насколько она мала. ИМО, это козыри «читабельности», как цитировали другие.
Специфика и время компиляции. Это то, что на ужин.