Как сравнить две строки в c
Перейти к содержимому

Как сравнить две строки в c

Сравнение строки с шаблоном посимвольно и вернуть результат

Добавлю ещё то что в цикле нужно проверять условия невыхода для обоих строк.

#include // for endl, basic_ostream, cin, cout, ostream #include // for string, operator // for and using std::string; using std::cout; using std::cin; using std::endl; int main() < string main_str = "Test 2 string 1 "; string template_str = "Test string "; string temporary_str = ""; for(string::size_type i = 0; i < template_str.size() and i < main_str.size(); ++i) < // сравниваем в цикле посимвольно if (main_str[i] != template_str[i])< // если не равно temporary_str.push_back(main_str[i]); // добавляем во временную переменную >> cout 

Как сравнить две строки в c

К строкам в языке С++ можно применять операции сравнения.

Эти операции сравнивают два объекта string, либо объект string со строковым литералом. Во всех операцияъ операнды сравниваются посимвольно до тех пор, пока не будет найдена пара соответствующих символов, которые содержат разные символы, или пока не будет достигнут конец одного или обоих операндов. Когда пара символов различается, с помощью сравнение числовых кодов символов определяется, какая строка условно «меньше» или «больше». Если разные пары символов не найдены, но строки имеют разную длину, более короткая строка «меньше» более длинной строки. Две строки равны, если они содержат одинаковое количество символы и все соответствующие коды символов равны. Подобный способ сравнения еще называется лексикографическим сравнением или сравнением в лексикографическом порядке. При этом стоит отметить, что поскольку сравниваются числовые коды символов, результат сравнения также зависит от регистра символов.

Например, оператор == возвращает true, если все символы обеих строк равны.

std::string s1 ; bool result ; // false - строки различаются по регистру result = s1 == "hello"; // true

Поскольку строки «hello» и «Hello» отличаются по регистру первой буквы, соответственно отличается и числовой код символа, поэтому эти строки не равны.

Другой пример — операция > (больше):

std::string s1 ; std::string s2 ; bool result s2>; // true

В данном случае условие s1 > s2 верно, то есть s1 больше чем s2, так как при равенстве первых трех символов («hel») третий символ первой строки («m») стоит в алфавите после четвертого символа второй строки («l»), то есть «m» больше чем «l» (несмотря на то, что по количеству символов «hello» больше чем «helm»).

Возьмем небольшую программу. Например, у нас есть массив имен, и нам надо отсортировать их в алфавитном порядке:

#include #include int main() < std::string people[] ; // сортируем по возрастанию bool sorted <>; do < sorted = true; // остается true, если строки отсортированы std::string temp; // переменная для обмена значениями for (unsigned i ; i < std::size(people); i++) < // если предыдущая строка больше последующей if (people[i-1] >people[i]) < // обмениваем значения temp = people[i]; people[i] = people[i-1]; people[i-1] = temp; sorted = false; >> > while (!sorted); // вывод строк на консоль for (const auto person: people) < std::cout >

Здесь для сортировки массива строк применяется не самая быстрая, но наглядная сортировка пузырьком, которая сравнивает предыдущую строку с последующей. Если предыдущая «больше» последующей, то через промежуточную переменную temp обмениваем значения. Чтобы оптимизировать сортировку, добавлена переменная sorted . Каждый раз, когда производится обмен значениями, эта переменная сбрасывается в false. А это значит, что нам надо заново запустить внешний цикл do-while .

Alice Bob Kate Sam Tom
Функция compare()

Для сравнения строк у строки также можно вызвать функцию compare() . В нее передается другая строка, с которой сравнивается текущая. Функция compare возвращает 0, если две строки равны. Если текущая строка больше, то возвращается число больше 0. Если текущая строка меньше, то возвращается число менише 0. Например:

std::string tom ; std::string person; int result = tom.compare(person); std::cout  

Здесь две строки равны, поэтому возвращается число 0.

std::string tom ; std::string bob; std::string sam ; int result = sam.compare(bob); // 1 - первая строка (sam) больше второй (bob) std::cout  

Здесь строка "Sam" больше строки "Bob", поэтому результатом первого сравнения будет число 1. А во втором сравнении первая строка "Sam" будет меньше второй строки "Tom", соответственно функция возвратить -1.

Функция compare() имеет ряд версий. Отметим одну из них, которая принимает три параметра:

int compare(size_t _Off, size_t _Nx, const std::string &_Right) const

Первый параметр представляет индекс первого символа в текущей строке, начиная с которого начинается подстрока. Второй параметр - количество символов подстроки. Третий параметр - строка, которая сравнивается подстрока. То есть сравниваем строку из третьего параметра с подстрокой, которая начинается с индекса в первом параметре и имеет количество символов, указанных во втором параметре.

Где мы это можем применить? Например, нам надо узнать индекс, с которого встречается одна строка в другой:

#include #include int main() < std::string text ; std::string word ; for (unsigned i<>; i < text.length() - word.length() + 1; i++) < if (text.compare(i, word.length(), word) == 0) < std::cout > >

В данном случае мы пытаемся найти индекс строки word ("world") в строке text ("Hello world!"). Для этого в цикле проходим по символам из строки text, пока не дойдем до символа с индексом text.length() - word.length() + 1 (так как сравниваем word.length() символов, поэтому вычитаем word.length(). И так как строки могут быть равны, добавляем 1)

В цикле выполняем сравнение

if (text.compare(i, word.length(), word) == 0)

то есть в строке text сравниваем подстроку, которая начинается с индекса i и имеет word.length() символов с строкой word. Если для какого то числа i мы смогли найти подобное равенство, то выводим число i на консоль. И в данном случае консоль отобразит следующее

text contains world at index 6

Еще одна форма функции compare() позволяет сравнивать две подстроки:

#include #include int main() < std::string text ; std::string word ; unsigned size ; // число сравниваемых символов из второй строки for (unsigned i<>; i < text.length() - size + 1; i++) < if (text.compare(i, size, word, 1, size) == 0) < std::cout > >

Здесь в принципе тот же алгоритм, что и с предыдущем примере. Только теперь сравниваем из строки word подстроку размером size, которая начинаяется с индекса 1 (то есть подстрока "or"), с подстрокой из строки text. И в данном случае консольный вывод будет следующим

text contains substring at index 7

Сравнение строк в C++: три основных метода

В этом руководстве мы изучим методы сравнения строк в C++. Давайте предположим, что нам необходимо ввести свое имя и пароль для входа на определенный веб-сайт. Для подобных случаев на серверной части мы должны собрать и написать скрипт для проверки и сравнения входной строки со строкой, хранящейся в базе данных.

Итак, на таком простом примере мы рассмотрим несколько способов сравнения строк в языке C++.

Методы сравнения строк в C++

Строки в C++ можно сравнивать с помощью любого из следующих методов:

  • Строковая функция strcmp()
  • Встроенная функция compare()
  • Реляционные операторы С++ ( ‘==’, ‘!=’)

1: Строковая функция strcmp()

C++ имеет встроенные функции для управления и обработки данных строкового типа. Чтобы сравнить две строки, мы можем использовать функцию strcmp().

strcmp() — это библиотечная функция C, используемая для сравнения двух строк лексикографическим способом.

Синтаксис функции выглядит так:

int strcmp ( const char * str1, const char * str2 );

Функция возвращает 0, если строки одинаковы.

Входная строка должна быть массивом символов в стиле C.

При сравнении строк функция strcmp() учитывает регистр.

#include using namespace std; #include int main()

В результате вы получите:

String 1:JournalDEV String 2:JournalDEv The input strings are not equal.

#include using namespace std; #include int main()

Результат будет выглядеть так:

String 1:Python String 2:Python Both the input strings are equal.

2: Функция compare()

C++ имеет встроенную функцию compare(), которая нужна для быстрого сравнения двух строк.

Функция сравнивает две строки и возвращает следующие значения в зависимости от результата сравнения:

int compare (const string& string-name) const;

А теперь давайте рассмотрим пару примеров. Пример 1:

#include using namespace std; int main()

В приведенном выше примере мы сравнили строку 1 со строкой 2. Как видите, обе строки лексикографически одинаковы, потому функция возвращает 0.

String 1:Python String 2:Python Both the input strings are equal.

#include using namespace std; int main()

В приведенном выше фрагменте кода мы снова сравнили строку с другой входной строкой с помощью функции compare().

String 1:Python Strings are equal. String 2:JournalDEV Strings are not Equal.

3: Реляционные операторы в C++

Реляционные операторы C++, такие как «==» и «!=», можно легко использовать для сравнения строк.

Синтаксис их выглядит следующим образом:

string1 == string 2 или string1 != string2

Давайте взглянем на первый пример с использованием оператора ==:

#include using namespace std; int main() < string str_inp1; string str_inp2; cout>str_inp1; cout>str_inp2; if (str_inp1 == str_inp2) cout

Он вернет такой результат:

Enter the String 1: Python Enter the String 2: PythoN Strings are not equal

Во втором примере мы попробуем использовать оператор !=:

#include using namespace std; int main() < string str_inp1; string str_inp2; cout>str_inp1; cout>str_inp2; if (str_inp1 != str_inp2) cout

В этом случае будет следующий результат:

Enter the String 1: Python Enter the String 2: Python Strings are equal

Заключение

В этой статье мы рассмотрели различные способы сравнения строк в языке C++.

Больше информации о C++ вы найдете в официальной документации.

Сравните две строки в C++

В этом посте мы обсудим, как сравнивать две строки в C++.

1. Использование string::compare

The string::compare Функция сравнивает значение строки с указанной последовательностью символов. Указанная последовательность может быть другой строкой или указателем на массив символов. Он возвращает целочисленное значение, указывающее связь между двумя строками.

Нулевой код состояния указывает, что строки равны. Ненулевой код состояния может быть положительным или отрицательным, указывая на то, что сравниваемая строка длиннее или короче указанной строки соответственно. Это показано ниже:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *