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

от admin

Сравнение строк в 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++.

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

Заголовочный файл 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 имеет другую проблему — скопированная строка НЕ заканчивается нулевым байтом, что опять же в будущем может привести к переполению буфера. Поэтому после копирования следует вручную устанавливать нулевой байт:

Читать:
Как сделать крестики нолики на python

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

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

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

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

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

C or C++. How to compare two strings given char * pointers?

I am sorting my array of car two ways. one by year which is shown below. and another one by make. Make is a char* How do I compare strings when I just have pointers to them?

The above method works for int’s (year). How can I make it work for char pointers?

8 Answers 8

In pretty much either one, the way is to call strcmp . If your strings (for some weird reason) aren’t NUL terminated, you should use strncmp instead.

However, in C++ you really shouldn’t be manipulating strings in char arrays if you can reasonably avoid it. Use std::string instead.

T.E.D.'s user avatar

I think you need to use the strcmp() function.

Make sure the char * isn’t null, and if you want, look for the stricmp() function for case insensitive comparisons. Otherwise, use strcmp().

char * actually represents the memory address of the first character in each string. So you don’t really want to be comparing the values of the pointers, but the contents they point to.

In C its strcmp() function as already stated. In C++ you can use the compare() function.

I’m of course assuming here you have char * for the car makes

You want to compare against 0 because strcmp will return 0 if there is no difference between the two strings.
strcmp takes two const char *.
http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

When you need to compare two char pointers specifically, you can compare them in the usual way: by using comparison operators < , > , == etc.

The issue in ths case is that you don’t need to compare two char pointers. What you do need though, is to compare two C-style strings these char pointers are pointing to. In order to compare the C-style strings, you have to use the standard strcmp function.

On top of that, the approach to handling null elements in your sorting algorithm doesn’t seem to make any sense whatsoever. Imagine an input array that contains alternating null pointers and non-null pointers. It is obvious, that your sorting algorithm will never sort anything, since the condition in your if will never be true. You need to reconsider your handling of null elements. Of course, first of all, you have to decide what to do with them. Ignore and leave in place? Push to one end of the array? Somethng else?

Сравнение двух переменных char с использованием strcmp в c ++ показывает недопустимое преобразование из ‘char’ в ‘const char *’

Я предполагаю для этого ответа, что s был объявлен как:

В этом случае вы не можете сравнивать s [0] [i] и s [rock] [j], используя strcmp, потому что это символы, а не указатели символов.

Вместо этого вы можете просто написать:

char это примитивный тип данных — вы можете сравнить char непосредственно:

strcmp функция ожидает строки, то есть char * отсюда и сообщение об ошибке. Вы можете сравнить целые строки в s переменная:

Для сравнения с char не используйте функцию сравнения строк! Прототип strcmp функция is-

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