Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/190: Рейтинг темы: голосов - 190, средняя оценка - 4.98
299 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,265
1

Как происходит сравнение строк?

23.12.2018, 16:20. Показов 38665. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
подскажите пожалуйста, как сравниваются строки в плюсах? что там при этом происходит? сравниваются количество символов в строке? то есть где их больше , та и строка больше, или символы сравниваются по ascii? по их кодам?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2018, 16:20
Ответы с готовыми решениями:

Как реализовать сравнение строк?
Здравствуйте, проблема в том, что я не знаю как сравнить строки в своей программе. Сейчас она...

Как произвести сравнение строк?
Дан текст, в котором есть букви и пропуски. Если в нем нету слова “весна”, то оставить его без...

Сравнение строк как регулярные выражения
Подскажите с виду такая простая задача. Сравнить к примеру строку "temp_" со строкой...

Как реализовать сравнение строк с русскими символами
Дело обстоит так: Нужно сравнить на сходство русские слова. Пробовал strcmp - но она что-то...

7
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
23.12.2018, 17:00 2
По порядку, от начала строки сравниваются коды символов.
s1 < s2, если при первом несовпадении символов c1 < c2;
s1 == s2, если все символы совпадают;
s1 > s2, если при первом несовпадении символов c1 > c2;
Если все символы совпадают, но одна из строк закончилась, то больше та строка, в которой символов больше.

Принцип хорошо описан для функции strcmp(), при сравнении string все точно так же.
1
299 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,265
23.12.2018, 18:36  [ТС] 3
да вы не хуже объяснили,чем описано в strcmp


только вот не пойму один момент: если строка -это массив символов типа char ,то как же этот массив сравнивается с другим массивом то есть с другой строкой? это же не паскаль где можно сравнить два массива просто и без цикла

вобщем вопрос, как сравниваются эти элементы массива без цикла?
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
23.12.2018, 18:50 4
Цитата Сообщение от pcmax Посмотреть сообщение
если строка -это массив символов типа char ,то как же этот массив сравнивается с другим массивом то есть с другой строкой?
Массив символов и строка - две разные вещи. У C-string в конце находится '\0' - символ конца строки. В массиве символов это требование может и не выполняться. Без цикла наверное никак не сравнить. Предположу, что и в паскале сравнение строк где-то в глубине реализации разворачивается в цикл. Экземпляры класса string сравниваются операторами сравнения (< | > | <= | >= | == | !=). C-string сравнить с помощью операторов сравнения не получится, для этого и есть strcmp().

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    char c_str_1[] = "abc";
    char c_str_2[] = "bbc";
 
    if (strcmp(c_str_1, c_str_2) < 0) {
        cout << c_str_1 << " < " << c_str_2 << endl;
    }
    else {
        cout << c_str_1 << " >= " << c_str_2 << c_str_2 << endl;
    }
 
    string str_1 = "acc";
    string str_2 = "abc";
 
    if (str_1 < str_2) {
        cout << str_1 << " < " << str_2 << endl;
    }
    else {
        cout << str_1 << " >= " << str_2 << endl;
    }
 
    return 0;
}
1
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
23.12.2018, 18:52 5
pcmax, в Си как такового стандартного типа данных string не было, а был массив char с нулем в конце. Для сравнения строк, в стандартной библиотеке Си написали функцию strcmp в которую передаются два указателя на char
от строк которые будут сравниваться, функция проводит лексикографическое сравнение посимвольно в цикле. В С++ совсем обленились и придумали классы. Написали класс string, почесали репу и подумали, что не хотят каждый раз использовать функцию strcmp, а хотят использовать такую фичу C++ как перегрузку операторов. В частности оператора "==". Внутри этой перегрузки и написали strcmp.

В этом и заключается принцип языков высокого уровня, если разматывать в низкую сторону, то там на самом деле тот самый цикл сравнивающий посимвольно строки, только обернутый в сто шуб, чтобы программисту удобнее было)
1
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
23.12.2018, 18:59 6
Цитата Сообщение от _SayHello Посмотреть сообщение
функция проводит лексикографическое сравнение
Лексикографическое относительно алфавита или таблицы символов?
1
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
23.12.2018, 19:15 7
valen10, Ну, в целом сравнивает по значению символа в таблице кодировки. Но если я не ошибаюсь, алфавит в этой таблице лежит в лексикографическом порядке.
1
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
23.12.2018, 19:20 8
Цитата Сообщение от _SayHello Посмотреть сообщение
алфавит в этой таблице лежит в лексикографическом порядке
Похоже, что не всегда. Национальная ASCII (Windows-1251) буквы Ёё хранит где-то в стороне от остального алфавита. Поэтому и решил уточнить.
1
23.12.2018, 19:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2018, 19:20
Помогаю со студенческими работами здесь

Строка: Подскажите, пожалуйста, как можно реализовать сравнение строк?
я считал с файла слово &quot;хорошо&quot; в массив. И теперь мне нужно сделать условие if...

Как происходит сравнение строк?
Код проверки отсортированности файла со строками КАК ПРОИСХОДИТ СРАВНЕНИЕ СТРОК? ( по длине, по...

Интерфейс IComparable - как в программе происходит сравнение по health
Здравствуйте! Подскажите пожалуйста , как в данной программе происходит сравнение по ...

Как происходит сравнение с помощью операторов LSS, LEQ, GTR, GEQ ?
Добрый день. Можете логично объяснить, как происходит сравнение с помощью операторов LSS, LEQ, GTR,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru