Урок 21. Функции сравнения строк C#
21-я часть учебника по основам языка C# продолжает изучение функциональности управления строками, предоставляемой классом String. В данной статье рассматриваются методы, доступные для сравнения содержимого строк.
Операторы равенства и неравенства
В более ранней части учебника по основам C# мы обсуждали равенство ( == ) и неравенство (!=) — реляционные операторы. Эти операторы позволяют производить точное сравнение двух строк с учетом регистра. В случае оператора равенства, если строки совпадают, результирующее логическое значение равно true. Если они отличаются, результат будет false. Оператор неравенства возвращает противоположный результат, как показано ниже:
Эти операторы полезны, но имеют ограничения. Они не позволяют вам рассматривать равенство двух строк, которые совпадают во всех, кроме регистра символов, к примеру. Они также не позволяют определить, что одна строка больше другой. В этой статье описываются методы, которые предоставляются для решения данных проблем.
Относительное сравнение
Метод CompareTo
Платформа .NET framework предоставляет метод CompareTo для многих типов данных, включая строки. Он позволяет сравнивать два значения и возвращает результат, который указывает не только на то, равны ли они, но и на то, что больше, когда они не равны. Метод учитывает и другую информацию при сравнении строк. Например, японские символы катаканы могут быть написаны двумя способами: в половину ширины или в полную ширину. Метод CompareTo считает, что символы, записанные как полная ширина, равны тем же символам половины ширины. Та же культурная информация используется для определения того, какая строка больше.
Метод CompareTo работает с существующей строкой. Строка, с которой она будет сравниваться, передается параметру. Метод возвращает целое число, обозначающее результат сравнения следующим образом:

Это можно уточнить на примере:
Примечание: поскольку этот метод вызывается для существующего экземпляра string, то если строка имеет значение null, возникает исключение:
Метод Compare
Функция Compare является статическим методом класса string. Он предоставляет аналогичную функциональность CompareTo, но позволяет указать больше опций. В качестве статического члена класса string обе строки передаются в качестве параметров.
Сравнение значений Null
Метод CompareTo вызывает исключение, если проверяемая строка имеет значение null, так как объект null не имеет доступных методов. Однако, поскольку метод Compare статичен, можно сравнивать пустые строки. Чувствительность к регистру
Метод Compare позволяет вам решать, выполнять ли сравнения с учетом регистра или без учета регистра. Различия между прописными и строчными буквами применяются в соответствии с настройками языка пользователя. Чтобы определить, следует ли использовать сравнение с учетом регистра, используется третий логический параметр. Если значение true, регистры игнорируются. Если false, то эффект будет таким же, как и отсутствие параметра вообще.
Этот пример предполагает английские настройки:
Метод Compare включает в себя перегруженные версии, позволяющие сравнивать строки с использованием дополнительных настроек международного языка, а также опции сравнения частей строк. Они выходят за рамки этого учебника, но их стоит изучить. Дополнительные сведения можно найти в MSDN.
Метод CompareOrdinal
Статический метод Compareordinal позволяет производить сравнение двух строк с учетом регистра. Он отличается от Compare тем, что result сравнения основан на числовых значениях Юникода для каждого символа. Поскольку важность символов в культурном контексте может отличаться от фиксированного числового порядка Юникода, при сравнении с использованием этого метода могут быть получены различные результаты. Это показано в следующем примере, который предполагает английскую конфигурацию Великобритании:
Метод Equals
Ну и рассмотрим метод Equals для полноты урока. Он возвращает логический result, указывающий, совпадают ли две строки, подобно оператору равенства (==). Метод может использоваться для объекта string с одним параметром или в качестве статического члена с двумя параметрами для сравниваемых строк.
Метод IsNullOrEmpty .NET 2.0
Иногда необходимо проверить, является ли строка пустой или неопределенной (null). При использовании .NET 1.1 для этого потребуется два теста. В .NET framework 2.0 появился новый статический метод isnullorempty, который выполняет оба теста с помощью одной инструкции. Метод возвращает true, если строка пустая или null.
Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
статьи IT, Уроки по си шарп, си шарп, string, сравнение
Как в C# правильно сравнивать строки
Как в C# правильно сравнивать строки: Equals или == ?
В обоих случаях результат True , хотя String является классом и оператор == должен был сравнить ссылки.
IlDasm показал, что создаются 2 переменные и сравниваются согласно методам Equals и == (op_Equality)
![]()
В C# правильно сравнивать строки и через == , и через Equals . Но более предпочтительным будет сравнивать через == .
Почему так?
Метод Equals подразумевает сравнение значений объектов ссылочного типа, он объявлен как virtual и для строк он перегружен и сравнивает их, как и предполагается, по значению. В Ваших классах Вы должны давать свою реализацию для него. Иначе он будет вести себя как ReferenceEquals и для ссылок, которые указывают не на один объект будет давать false , хоть они и будут равны по значению.
Оператор == для строк представляют свою реализацию, отличную от стандартной для всех других объектов ссылочного типа. Если сравниваемые ссылки имеют тип System.String , то он сначала сравнит указывают ли ссылки на один тот же объект и если нет, то будет сравнивать две ссылки типа System.String по значению.
Но маленькое замечание, если мы сравниваем объект типа System.String ( string ) с объектом типа System.Object (object), который указывает на строку, они будут сравниваться по значениям.
result будет равен true , так как obj приведётся к типу string , потому что метод Equals мы вызвали у строки (объекта типа string ).
Но если мы сравниваем объект типа System.Object (object), который указывает на строку, с объектом типа System.String ( string ) они будут сравниваться по ссылке.
result будет равен false , так как str приведётся к типу object , потому что метод Equals мы вызвали у объекта типа object .
Сравнение строк в C++: три основных метода
В этом руководстве мы изучим методы сравнения строк в C++. Давайте предположим, что нам необходимо ввести свое имя и пароль для входа на определенный веб-сайт. Для подобных случаев на серверной части мы должны собрать и написать скрипт для проверки и сравнения входной строки со строкой, хранящейся в базе данных.
Итак, на таком простом примере мы рассмотрим несколько способов сравнения строк в языке C++.
Методы сравнения строк в C++
Строки в C++ можно сравнивать с помощью любого из следующих методов:
- Строковая функция strcmp()
- Встроенная функция compare()
- Реляционные операторы С++ ( ‘==’, ‘!=’)
1: Строковая функция strcmp()
C++ имеет встроенные функции для управления и обработки данных строкового типа. Чтобы сравнить две строки, мы можем использовать функцию strcmp().
strcmp() — это библиотечная функция C, используемая для сравнения двух строк лексикографическим способом.
Синтаксис функции выглядит так:
Функция возвращает 0, если строки одинаковы.
Входная строка должна быть массивом символов в стиле C.
При сравнении строк функция strcmp() учитывает регистр.
В результате вы получите:
Результат будет выглядеть так:
2: Функция compare()
C++ имеет встроенную функцию compare(), которая нужна для быстрого сравнения двух строк.
Функция сравнивает две строки и возвращает следующие значения в зависимости от результата сравнения:
- 0, если строки одинаковы.
- <0, если значение символа первой строки меньше по сравнению со второй строкой.
- >0, если первая строка больше по сравнению со второй.
А теперь давайте рассмотрим пару примеров. Пример 1:
В приведенном выше примере мы сравнили строку 1 со строкой 2. Как видите, обе строки лексикографически одинаковы, потому функция возвращает 0.
В приведенном выше фрагменте кода мы снова сравнили строку с другой входной строкой с помощью функции compare().
3: Реляционные операторы в C++
Реляционные операторы C++, такие как «==» и «!=», можно легко использовать для сравнения строк.
Синтаксис их выглядит следующим образом:
Давайте взглянем на первый пример с использованием оператора ==:
Он вернет такой результат:
Во втором примере мы попробуем использовать оператор !=:
В этом случае будет следующий результат:
Заключение
В этой статье мы рассмотрели различные способы сравнения строк в языке C++.
Как сравнить две строки в c
Конкатенация строк или объединение может производиться как с помощью операции + , так и с помощью метода Concat :
Метод Concat является статическим методом класса string, принимающим в качестве параметров две строки. Также имеются другие версии метода, принимающие другое количество параметров.
Для объединения строк также может использоваться метод Join :
Метод Join также является статическим. Использованная выше версия метода получает два параметра: строку-разделитель (в данном случае пробел) и массив строк, которые будут соединяться и разделяться разделителем.
Сравнение строк
Для сравнения строк применяется статический метод Compare :
Данная версия метода Compare принимает две строки и возвращает число. Если первая строка по алфавиту стоит выше второй, то возвращается число меньше нуля. В противном случае возвращается число больше нуля. И третий случай — если строки равны, то возвращается число 0.
В данном случае так как символ h по алфавиту стоит выше символа w, то и первая строка будет стоять выше.
Поиск в строке
С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:
Подобным образом действует метод LastIndexOf , только находит индекс последнего вхождения символа или подстроки в строку.
Еще одна группа методов позволяет узнать начинается или заканчивается ли строка на определенную подстроку. Для этого предназначены методы StartsWith и EndsWith . Например, в массиве строк хранится список файлов, и нам надо вывести все файлы с расширением exe:
Разделение строк
С помощью функции Split мы можем разделить строку на массив подстрок. В качестве параметра функция Split принимает массив символов или строк, которые и будут служить разделителями. Например, подсчитаем количество слов в сроке, разделив ее по пробельным символам:
Это не лучший способ разделения по пробелам, так как во входной строке у нас могло бы быть несколько подряд идущих пробелов и в итоговый массив также бы попадали пробелы, поэтому лучше использовать другую версию метода:
Второй параметр StringSplitOptions.RemoveEmptyEntries говорит, что надо удалить все пустые подстроки.
Обрезка строки
Для обрезки начальных или концевых символов используется функция Trim :
Функция Trim без параметров обрезает начальные и конечные пробелы и возвращает обрезанную строку. Чтобы явным образом указать, какие начальные и конечные символы следует обрезать, мы можем передать в функцию массив этих символов.
Эта функция имеет частичные аналоги: функция TrimStart обрезает начальные символы, а функция TrimEnd обрезает конечные символы.
Обрезать определенную часть строки позволяет функция Substring :
Функция Substring также возвращает обрезанную строку. В качестве параметра первая использованная версия применяет индекс, начиная с которого надо обрезать строку. Вторая версия применяет два параметра — индекс начала обрезки и длину вырезаемой части строки.
Вставка
Для вставки одной строки в другую применяется функция Insert :
Первым параметром в функции Insert является индекс, по которому надо вставлять подстроку, а второй параметр — собственно подстрока.
Удаление строк
Удалить часть строки помогает метод Remove :
Первая версия метода Remove принимает индекс в строке, начиная с которого надо удалить все символы. Вторая версия принимает еще один параметр — сколько символов надо удалить.
Замена
Чтобы заменить один символ или подстроку на другую, применяется метод Replace :
Во втором случае применения функции Replace строка из одного символа «о» заменяется на пустую строку, то есть фактически удаляется из текста. Подобным способом легко удалять какой-то определенный текст в строках.
Смена регистра
Для приведения строки к верхнему и нижнему регистру используются соответственно функции ToUpper() и ToLower() :