Как сравнивать строки в си

от admin

Как сравнивать строки в си

Заголовочный файл string.h содержит ряд функций для работы со строками. Рассмотрим некоторые из них.

Длина строки. strlen

Функция strlen() возвращает количество символов строки (без учета концевого нулевого байта). Функция имеет следующее описание:

То есть в качестве параметра принимает строку, длину которой надо найти. А результатом является значение size_t — данный тип представляет целое положительное число, который определен специально для представления размера.

Найдем длину строки:

Для вывода на консоль значения size_t применяется спецификатор %zu .

Сравнение строк. strcmp

Для сравнения строк применяется функция strcmp() , которая имеет следующий прототип:

Функция принимает две строки и посимвольно сравнивает их. Результатом функции является целое число. Функция посимвольно сравнивает строки, и . . Если

если строки равны, то возвращается 0

Если первый несовпадающий символ первой строки идет в лексикографическом порядке до символа второй строки, то возвращается число меньше 0

Если первый несовпадающий символ первой строки идет в лексикографическом порядке после символа второй строки, то возвращается число больше 0

Сравним пару строк:

Объединение строк. strcat

Функция strcat объединяет две строки в одну. Она имеет следующий прототип:

Функция добавляет строку source_str к строке destination_str . При этом первая строка должна быть достаточно большая, чтобы вместить вторую строку:

Копирование строк. strcpy

Функция strcpy копирует символы из одной строки в другую. Она имеет следующий прототип:

Функция копирует символы из строки source_str в destination_str . При этом первая строка должна иметь достаточную длину, чтобы вместить вторую.

Скопируем символы из одной строки во вторую:

Стоит отметить, что эта функция копирует символы из source в destination, пока не встретит нулевой байт \0. Теоретически это может приводить к переполнению буфера. И для избежания этой проблемы есть другая функция — strncpy , которая в качестве третьего параметра принимает количество копируемых символов:

Однако функция strncpy имеет другую проблему — скопированная строка НЕ заканчивается нулевым байтом, что опять же в будущем может привести к переполению буфера. Поэтому после копирования следует вручную устанавливать нулевой байт:

Кроме того, можно использовать функцию strncpy_s , которая считается более безопасной:

Эта функция принимает дополнительные параметры — destmax — максимальное количество копируемых символов в буфер destination и srcmax — максимальное количество копируемых символов из строки source. В качестве результата функция возвращает информацию об ошибке:

Поиск в строке подстроки. strstr

Функция strstr ищет в строке определенную подстроку. Она имеет следующий прототип:

Функция ищет подстроку substring в строке string и возвращает указатель на символ первого вхождения подстроки, то есть по сути адрес подстроки. Если от адреса первого символа строки вычесть адрес первого входжения подстроки, то мы получим индекс подстроки в строке:

Как сравнивать строки в си

In C language, the <string.h> header file contains the Standard String Library that contains some useful and commonly used string manipulation functions. One such function is strcmp() which compares two strings in C.

What is strcmp() in C?

C strcmp() is a built-in library function that is used for string comparison. This function takes two strings (array of characters) as arguments, compares these two strings lexicographically, and then returns 0,1, or -1 as the result. It is defined inside <string.h> header file with its prototype as follows:

Читать:
Что такое десктопная версия

Syntax of strcmp() in C

Parameters of strcmp() in C

This function takes two strings (array of characters) as parameters:

  • first_str: First string is taken as a pointer to the constant character (i.e. immutable string).
  • second_str: Second string is taken as a pointer to a constant character.

Note: The reason arguments are taken as const char * instead of only char * is so that the function could not modify the string and also make them applicable for constant strings.

Return Value of strcmp() in C

The strcmp() function returns three different values after the comparison of the two strings which are as follows:

1. Zero ( 0 )

A value equal to zero when both strings are found to be identical. That is, all of the characters in both strings are the same.

2. Greater than Zero ( > 0 )

A value greater than zero is returned when the first not-matching character in first_str has a greater ASCII value than the corresponding character in second_str or we can also say that if the character in first_str is lexicographically after the character of second_str, then zero is returned.

3. Lesser than Zero ( < 0 )

A value less than zero is returned when the first not-matching character in first_str has a lesser ASCII value than the corresponding character in second_str. We can also say that if the character in first_str is lexicographically before the character of second_str, zero is returned.

To know more about ASCII values, refer to this article – ASCII Table

How to use the strcmp() function in C

The following example demonstrates how to use the strcmp() function in C:

Функция strcmp

Эта функция сравнивает символы двух строк, string1 и string2 . Начиная с первых символов функция strcmp сравнивает поочередно каждую пару символов, и продолжается это до тех пор, пока не будут найдены различные символы или не будет достигнут конец строки.

Параметры:

  • string1
    Первая сравниваемая Си-строка.
  • string2
    Вторая сравниваемая Си-строка.

Возвращаемое значение

Функция возвращает несколько значений, которые указывают на отношение строк:
Нулевое значение говорит о том, что обе строки равны.
Значение больше нуля указывает на то, что строка string1 больше строки string2 , значение меньше нуля свидетельствует об обратном.

Функция strcmp начинает сравнивать по одному символу и как только будут найдены первые неодинаковые символы, функция проанализирует числовые коды этих символов. Чей код окажется больше, та строка и будет считаться большей.

Сравнение двух строк

В Си и Си++ нельзя непосредственно сравнить значение двух строк с помощью, например, такого условия:

if (string1 == string2)

Рис. 10.8. Синтаксис функции strcmp()

Однако большинство библиотек содержит функцию strcmp(), которая возвращает нулевое значение в том случае, если строки одинаковы, либо значение, отличное от нуля, если строки не совпадают. Синтаксис функции strcmp() показан на рис.10.8. Эта функция используется в программе следующим образом:

if (strcmp(name1, name2) == 0)

puts(«Имена не совпадают»);

Некоторые компиляторы возвращают отрицательное число, если первая строка оказывается с точки зрения алфавита «меньше» второй, и положительное число, если «больше».

Если компилятор не имеет функции strcmp(), можно написать собственную функцию, которая сравнивала бы две сроки элемент за элементом как параллельные массивы, и останавливалась при обнаружении пары несовпадающих значений:

Похожие статьи