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

Unicode, UTF-8 и ANSI в одном консольном приложении. Можно ли "на лету" конвертировать массив строк? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Другой рандом http://www.cyberforum.ru/cpp-beginners/thread709528.html
Есть некоторое беззнаковое целое N, нужна рандомная последовательность не повторяющихся беззнаковых целых меньше N. Длина последовательности не превышает N, но может быть меньше N, функция должна гарантировать генерацию одного члена последовательности менее, чем за 50 миллисекунд при каждом вызове, включая N-ный. После каждого вызова функции её значение используется в качестве индекса массива из...
C++ Написать функцию, находящую сумму цифр целого числа Написать функцию SumDigit(N), находящую сумму цифр целого числа N (N - входной параметр). При вводе N реализовать проверку на корректность исходных данных (N > 0). http://www.cyberforum.ru/cpp-beginners/thread709484.html
Оператор цикла. Вывести таблицу степеней двойки от нулевой до десятой C++
Задание выполните, используя все три оператора цикла (т.е. вывод результатов на экран у Вас будет осуществляться трижды с коментарием о названии оператора цикла). Написать программу, которая выводит таблицу степеней двойки от нулевой до десятой.
C++ Динамическое программирование. Определить оптимальную загрузку самолетов с грузоподъёмностью от G до 1,3G
Помогите решить задачу на динамич. программирование: Самолет имеет максимальную грузоподъемность G(m). Предметы, загружаемые в самолет, имеют различные веса и стоимости: wi(m), Сi (руб.) соответственно. Определить оптимальную загрузку самолетов с грузоподъёмностью от G до 1,3G. Показать, как изменится решение, если j-х предметов нужно погрузить не меньше k. G=20 W1=0,8 C1=12 W2=3,2...
C++ Объединить массивы в один, включив второй между пятым и шестым элементами http://www.cyberforum.ru/cpp-beginners/thread709420.html
Ввести с клавиатуры два одномерных массива содержащих 10 и 5 элементов. Объединить их в один массив, включив второй между пятым и шестым элементами.На экран вывести исходные массивы сформированные в три строки. спасибо
C++ Запрет ввода символов в консоли моя консольная программа имеет очень много вводов от пользователя, через контекстное меню (нажмите 1 для того, 2 для другого) чтоб не делать и не зацикливать каждый ввод в коде, возможно ли полностью запретить ввод каких-то конкретных символов(в основном запретить все кроме цифр 0-9 и +-) чтоб консоль никак не реагировала пока не введется допустимое значение. если нет, то как более удобно... подробнее

Показать сообщение отдельно
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
26.11.2012, 14:24     Unicode, UTF-8 и ANSI в одном консольном приложении. Можно ли "на лету" конвертировать массив строк?
Вот преобразование utf-8 в utf-32:
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
55
56
57
58
59
60
61
62
63
64
65
66
    //  UTF-8 -> UTF-32
    utf32string utf8ToUtf32( const utf8string& input )
    {
        //  Current state - none or matching 2-3-4 byte sequence
        enum {
            None,
            Two,
            Three,
            Four
        };
 
        utf32string wide;
        //  Unicode standard version 5.2 recommends to replace each maximal ill-formed subsequence by
        //  a single U+FFFD
        int32_t error = 0xfffd;
 
        int state = None;
        int32_t n;
        
        std::size_t length = input.size();
        for ( int i = 0; i < length; ++i ) {
            char c = input[ i ];
 
            if ( state == None ) {
                //  0xxx xxxx
                if ( ( c & 0x80 ) == 0 ) {
                    wide += c;
                } else {
                    //  110y yyyy   10xx xxxxx
                    if ( ( c & 0x70 ) == 0xc0 ) {
                        n = c & 0x1f;
                        state = Two;
                    } else {
                        //  1110 zzzz   10yy yyyy   10xx xxxx
                        if ( ( c & 0xf0 ) == 0xe0) {
                            n = c & 0x0f;
                            state = Three;
                        } else {
                            //  1111 0uuu   10uu zzzz   10yy yyyy   10xx xxxx
                            if ( ( c & 0xf8 ) == 0xf0 ) {
                                n = c & 0x07;
                                state = Four;
                            } else {
                                wide += error;
                                state = None;
                            }
                        }
                    }
                }
            } else {
                if ( ( c & 0xc0 ) == 0x80 ) {
                    n = ( n << 6 ) | ( c & 0x3f );
                    if ( --state == 0 ) {
                        wide += n;
                    }
                } else {
                    wide += error;
                    state = None;
                    //  Start matching subsequences from current faulty symbol
                    i--;
                }
            }
        }
 
        return wide;
    }
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru