Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/55: Рейтинг темы: голосов - 55, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
1

String, сравнение без учёта регистра

19.03.2018, 21:17. Показов 10746. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сравнить:
C++
1
string name1,name2;
,без учета регистра. То есть когда
C++
1
name1="QWE";name2="Qwe"
-прада
P.S.Главное что бы сравнивалось без учета регистра
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2018, 21:17
Ответы с готовыми решениями:

Сравнение двух std::string на совпадение без учёта регистра
Нужно сравнить две строки на одинаковость, но без учёта регистра. Чтобы name и Name и NaME...

Сравнение строк без учёта регистра
Доброго времени суток. Функция strcmp сравнивает 2 строки с учётом регистра, а как можно сравнить...

Сортировка vector<string> без учёта регистра
Мне нужно отсортировать по алфавиту строки без учёта регистра. Не могу разобраться с понижением...

Сравнение строк string без учета регистра
Есть уже реализованная стандартная функция для решения такой задачи? Делал это через перевод...

16
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127
19.03.2018, 21:25 2
Для UnicodeString есть функция CompareIC (сравнивает без учета регистра), для AnsiString - AnsiCompareIC.
0
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
19.03.2018, 21:29  [ТС] 3
C++
1
2
3
4
string name1,name2;
getline(cin, name1);
getline(cin, name2);
if (!name1.compare (name2)){////}
Не работает
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.03.2018, 21:51 4
Цитата Сообщение от ОноРаботает Посмотреть сообщение
Главное что бы сравнивалось без учета регистра
Цитата Сообщение от ОноРаботает Посмотреть сообщение
!name1.compare (name2)
противоречит друг другу, нужно приводить, или используйте boost::iequals или strcmp()

Добавлено через 1 минуту
C++
1
2
3
4
const char *a1 = "QWE";
const char *a2 = "Qwe";
 
if (strcmp(a1, a2)) cout << "TRUE";
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
19.03.2018, 21:54  [ТС] 5
как в моем случае можно написать с помощью
C++
1
boost::iequals
Добавлено через 46 секунд
место char надо string
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.03.2018, 22:00 6
Цитата Сообщение от ОноРаботает Посмотреть сообщение
как в моем случае можно написать с помощью
нужно скачать и подключить библиотеку boost

а приведение tolower не подходит?
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
19.03.2018, 22:00  [ТС] 7
а со string tolower работает?
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.03.2018, 22:07 8
Цитата Сообщение от ОноРаботает Посмотреть сообщение
а со string работает?
да, конечно
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
19.03.2018, 22:12 9
Цитата Сообщение от Azazel-San Посмотреть сообщение
C++
1
if (strcmp(a1, a2)) cout << "TRUE";
И о чём это true?
1
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.03.2018, 22:23 10
Цитата Сообщение от nd2 Посмотреть сообщение
И о чём это true?
да, спасибо из Сишных ф-й надо использовать _stricmp вместо strcmp

Добавлено через 2 минуты
Автору можно что-то такое для сравнений string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool iequal(const string &s1, const string &s2) 
{
    if (s1.size() != s2.size())
    {
        return false;
    }
 
    for (auto c1 = s1.begin(), c2 = s2.begin(); c1 != s1.end(); ++c1, ++c2)
    {
        if (tolower(*c1) != tolower(*c2))
        {
            return false;
        }
    }
    return true;
}
...
string name1 = "QWE";
string name2 = "qwe";
 
cout << iequal(name1, name2);
критика приветствуется
2
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
19.03.2018, 22:29  [ТС] 11
Цитата Сообщение от Azazel-San Посмотреть сообщение
да, конечно
невозможно преобразовать аргумент 1 из "std::string" в "int"

Добавлено через 45 секунд
Цитата Сообщение от Azazel-San Посмотреть сообщение
да, спасибо из Сишных ф-й надо использовать _stricmp вместо strcmp

Добавлено через 2 минуты
Автору можно что-то такое для сравнений string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool iequal(const string &s1, const string &s2) 
{
    if (s1.size() != s2.size())
    {
        return false;
    }
 
    for (auto c1 = s1.begin(), c2 = s2.begin(); c1 != s1.end(); ++c1, ++c2)
    {
        if (tolower(*c1) != tolower(*c2))
        {
            return false;
        }
    }
    return true;
}
...
string name1 = "QWE";
string name2 = "qwe";
 
cout << iequal(name1, name2);
критика приветствуется
спасибо.сейчас попробую

Добавлено через 4 минуты
Цитата Сообщение от Azazel-San Посмотреть сообщение
да, спасибо из Сишных ф-й надо использовать _stricmp вместо strcmp

Добавлено через 2 минуты
Автору можно что-то такое для сравнений string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool iequal(const string &s1, const string &s2) 
{
    if (s1.size() != s2.size())
    {
        return false;
    }
 
    for (auto c1 = s1.begin(), c2 = s2.begin(); c1 != s1.end(); ++c1, ++c2)
    {
        if (tolower(*c1) != tolower(*c2))
        {
            return false;
        }
    }
    return true;
}
...
string name1 = "QWE";
string name2 = "qwe";
 
cout << iequal(name1, name2);
критика приветствуется
Спасибо,помогло.Но не понятна вот эта строчка
C++
1
auto c1 = s1.begin(), c2 = s2.begin(); c1 != s1.end();
а именно зачем писать begin и end
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.03.2018, 22:34 12
Цитата Сообщение от ОноРаботает Посмотреть сообщение
а именно зачем писать begin и end
возвращают итераторы на 1й и следующий за последним элементы строки соответственно.
нужны собственно для стравнений посимвольно и выхода из цикла.
1
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
19.03.2018, 22:37 13
Лучший ответ Сообщение было отмечено ОноРаботает как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    string str_1 = "helllo", str_2 = "HELLLO";
    if (_stricmp(str_1.c_str(), str_2.c_str()) == 0)
    {
        cout << "Equal";
    }
    else
    {
        cout << "Not equal";
    }
    return 0;
}
1
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.03.2018, 22:39 14
Цитата Сообщение от SuperKir Посмотреть сообщение
Зачем нам Страуструпа критиковать?
писал с памяти, вдруг что забыл и там вроде не так было?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
19.03.2018, 22:41 15
C++
1
2
3
4
5
6
7
    string str1 = "QWE";
    string str2 = "Qwe";
    if (str1.size() == str2.size() && equal(str1.begin(), str1.end(), str2.begin(), 
        [] (const char& a, const char& b) { return tolower(a) == tolower(b);}))
        cout << "true" << endl;
    else
        cout << "false" << endl;
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
19.03.2018, 22:47  [ТС] 16
спасибо.вот уже 2 способа рабочих есть
0
SuperKir
19.03.2018, 22:48     String, сравнение без учёта регистра
  #17

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
писал с памяти, вдруг что забыл и там вроде не так было?
Ты прав, логика такая же, но реализация немного иная, прошу прощения :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2018, 22:48

Сравнить 2 символа без учёта регистра
Привет всем. У меня есть два символа: char c='i',c2='I' И как мне сравнить их без учёта регистра?

Реализовать поиск без учёта регистра
Здравствуйте, возникла проблема, нужно сделать поиск строки в текстовом файле без учёта регистра....

Считывание строк с клавиатуры без учёта разделителей в переменные типа std::string
Подскажите, есть какой способ считывать значения с клавиатуры без учёта разделитей в переменные...

Сравнение строк без учета регистра
Хэй! Есть ли в плюсах из коробки функция/метод сравнения строк без учета регистра? Или нужно метод...


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

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