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

Написать программу сравнения строк без учета регистра

17.09.2014, 07:02. Показов 3309. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! помагите плз!)Написать программу, которая запрашивает у пользователя строки, а затем сравнивает эти строки, не обращая внимания на регистр букв. В этом случае "ok" и "ОК" будут считаться равными.
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2014, 07:02
Ответы с готовыми решениями:

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

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

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

Написать макрос сравнения без учета регистра
Пож, подскажите, есть макрос для сравнения текста двух ячеек, учитывающий Регистр If...

3
Модератор
Эксперт С++
13678 / 10888 / 6465
Регистрация: 18.12.2011
Сообщений: 29,051
17.09.2014, 09:28 2
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
#include <iostream>
#include <cstring>
#include <locale>
#include <windows.h>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
    char txt1[100];
    cout<<"строка 1:";
    cin.getline(txt1,100);
    char txt2[100];
    cout<<"строка 2:";
    cin.getline(txt2,100);
    locale loc ( "Rus" );
    use_facet<ctype<char> > ( loc ).tolower( txt1, txt1+strlen(txt1));
    use_facet<ctype<char> > ( loc ).tolower( txt2, txt2+strlen(txt2));
    if(strcmp(txt1,txt2)==0)
        cout<<"строка "<<txt1<<" Равна строке "<<txt2<<endl;
    else
        cout<<"строка "<<txt1<<" НЕ равна строке "<<txt2<<endl;
    system("pause");
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
17.09.2014, 14:17 3
Елси нужно регистронезависимое сравнение на уровне типов, то надо определить свой char_traits. Если просто одноразовая проверка - приводите все строки к одному из регистров и сравнивайте.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// пишем свой char_traits для поиска без учета регистра
struct my_traits : std::char_traits<wchar_t>
{
    static bool eq(const wchar_t lhs, const wchar_t rhs)
    {
        return std::towlower(lhs) == std::towlower(rhs);
    }
    static bool ne(const wchar_t lhs, const wchar_t rhs)
    {
        return std::towlower(lhs) != std::towlower(rhs);
    }
    static bool lt(const wchar_t lhs, const wchar_t rhs)
    {
        return std::towlower(lhs) < std::towlower(rhs);
    }
    static int compare(const wchar_t* s1, const wchar_t* s2, size_t n)
    {
        while (n--)
        {
            if(!s1 || lt(*s1, *s2))
                return -1;
            else if(!s2 || lt(*s2, *s1))
                return 1;
 
            ++s1; ++s2;
        }
        return 0;
    }
    static const wchar_t* find(const wchar_t* s1, size_t n, const wchar_t c)
    {
        while (n--)
        {
            if (eq(*s1, c))
                return s1;
            else ++s1;
        }
        return 0;
    }
};
 
typedef std::basic_string<wchar_t, my_traits> mystring;
 
inline std::wostream& operator<< (std::wostream& os, const mystring& s)
{
    return os << std::wstring(s.c_str(), s.length());
}
 
inline std::wistream& operator>> (std::wistream& is, mystring& s)
{
    std::wstring tmp;
    is >> tmp;
    s = mystring(tmp.c_str(), tmp.length());
    return is;
}
0
Эксперт по математике/физикеЭксперт С++
2150 / 1400 / 406
Регистрация: 16.05.2013
Сообщений: 3,575
Записей в блоге: 6
18.09.2014, 08:23 4
MrGluck, все функции перегружать совсем не обязательно. Достаточно eq и lt, а ne такой функции, если я не ошибаюсь, в стуктуре char_traits вообще нет.
0
18.09.2014, 08:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2014, 08:23
Помогаю со студенческими работами здесь

Написать программу, определяющую является ли данная строка палиндромом (без учета регистра)
Написать программу, определяющую является ли данная строка палиндромом (без учета регистра) Все...

Написать программу, определяющую является ли данная строка палиндромом (без учета регистра)
Задание: 1.Написать программу, определяющую является ли данная строка палиндромом (без учета...

Написать программу,определяющую является ли строка палиндром без учета регистра, во free pascal
{'a'..'z', 'а'..'п'} if ord(s) in or ord(s) in then s := chr(ord(s) - 32); {'р'..'я'} if...

Сравнение строк без учета регистра
Хочу, чтобы как не ввел человек ответ, строка ответа fUpperCase (подымалась на верхний регистр) для...


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

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