Форум программистов, компьютерный форум CyberForum.ru

Регистронезависимое сравнение строк с русскими буквами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структуры http://www.cyberforum.ru/cpp-beginners/thread711308.html
Ребята, помогите пожалуйста решить задачу. Есть массив с 10 структур, куда заносятся данные об студентах: Имя, номер группы и количество пропусков. Надо чтобы выводило записи по спаданию номеров групп. Цикл для этого то работает, и номера групп берет правильно, но имена выводит не соответствующие номеру группы. вот код: #include <vcl.h> #pragma hdrstop #include <iostream.h> #include...
C++ Что содержит ссылка? Почитал в нескольких местах. Везде одно и то же: "ссылка - это псевдоним". Интересно, а она вообще является отдельной переменной? То есть: int x = 2; int &r = x; Здесь r это ссылка (т.е. псевдоним) x. А в самой оперативной памяти r будет лежать как отдельная переменная? Я так понял, что да. Что она тогда содержит? Просто где-то прочитал, что ссылка инициализируется адресом переменной. Значит,... http://www.cyberforum.ru/cpp-beginners/thread711281.html
Найти количество цифр в десятичном числе k C++
Найти количество цифр в десятичном числе k.
C++ Дана последовательность целых чисел, за которой следует 0. Найти сумму элементов с нечетными номерами из этой последовательности
Дана последовательность целых чисел, за которой следует 0. Найти сумму элементов с нечетными номерами из этой последовательности.
C++ Invalid conversion from `int' to `const char*' http://www.cyberforum.ru/cpp-beginners/thread711270.html
Здравствуйте.Возникла проблема с типами данных, пытался решить - стало хуже...:wall: Вот сам код: #include <iostream> #include <cstring> #include <fstream> using namespace std; struct dannie {
C++ структуры ссылки и функции Здравствуйте. Есть задача: " В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время отправления и прибытия. Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени. Использовать функции." Помимо этого нужно сделать в программе передачу структуры по... подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
27.11.2012, 21:44  [ТС]     Регистронезависимое сравнение строк с русскими буквами
Что любопытно такой вот toUp работает правильно если проверять работу в main, а вот в функции при проходе итератором говорит что коды не совпадают
C++
1
2
3
4
5
6
7
8
9
10
wchar_t toUp(const wchar_t ch)
{
    static wchar_t A = 'А';
    static wchar_t a = 'а';
    static int diff= a - A; // = 32
    if(ch>=a && ch<A) // в нижнем регистре
        return ch;
    else
        return ch-diff;
}
При этом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    bool compare_nocase(const string &str1, const string &str2)
    {
        string::const_iterator i1 = str1.begin(), i2 = str2.begin();
        std::locale loc = std::locale::classic();
 
        while((i1 != str1.end()) && (i2 != str2.end()))
        {
            if(toUp(*i1) != toUp(*i2))
            {
                return false;
            }
 
            ++i1, ++i2;
        }
 
        return (str1.length() == str2.length());
    }
говорит что "стрОка" = "строка" false

Добавлено через 47 секунд
Toshkarik, а, это я воевал с ещё 3мя вариантами изменяя немного название функции чтобы не гризлись и сразу находились рядышком, это исправить недолго

Добавлено через 3 минуты
Хотя вот так уже работает правильно:
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
wchar_t toLow(const wchar_t ch)
{
    static wchar_t A = 'А';
    static wchar_t a = 'а';
    static int diff= a - A; // = 32
    if(ch>=A && ch<a) // в верхнем регистре
        return ch+diff;
    else
        return ch;
}
 
    bool compare_nocase(const string &str1, const string &str2)
    {
        string::const_iterator i1 = str1.begin(), i2 = str2.begin();
        std::locale loc = std::locale::classic();
 
        while((i1 != str1.end()) && (i2 != str2.end()))
        {
            if(toLow(*i1) != toLow(*i2))
            {
                return false;
            }
 
            ++i1, ++i2;
        }
 
        return (str1.length() == str2.length());
    }
абрикос = АбРиКос true
 
Текущее время: 06:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru