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

Как перевести строку в читабельный вид? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка конструктора копирования и оператора присвоения http://www.cyberforum.ru/cpp-beginners/thread444377.html
Всем привет, сразу к делу. После прочтения 11 главы Лафоре столкнулся с такой бедой как понятие перегрузка оператора присвоения. Дело в том что Лафоре говорит что именно оператор присвоения является уникальным и не наследуется. Но когда создаёшь указатель на базовый класс там естественно делаешь все методы виртуальными (для полиморфизма), при раз адресации указателя происходит вызов...
C++ Дальнейшее изучение С++ Вот хотел у вас спросить, что дальше можно почитать после Бьярне Страуструп Программирование: принципы и практика использования C++, и после Р.Лафоре ООП в С++, планирую купить по WinApi и что то еще хотел у вас спросить что можно еще купить почитать http://www.cyberforum.ru/cpp-beginners/thread444347.html
полноэкранный режим консоли C++
Здравствуйте! Не могли бы подсказать, как программно переходить в полноэкранный режим в консоле? (Именно переходить, а не получать информацию, является ли режим полноэранным) Добавлено через 19 минут Функцию нашёл тут, только возникают ошибки. Код программы: #include <windows.h>; #include <wincon.h>;
C++ Преобразовать выражение в постфиксную форму
Преобразовать выражение, составленное из цифр и знаков арифметических операций (+,-,*,/) в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции. Обычная запись 3+4 (5-4)*2 2*(3+4)*5 Постфиксная запись 3 4 + 5 4 – 2 * 2 3 4 + * 5 *
C++ Построить некоторый Автомат на три команды http://www.cyberforum.ru/cpp-beginners/thread444324.html
Некоторый автомат может запросить два числа и выполнить 3 команды. Команда А преобразует имеющуюся пару чисел (х, у) в (х-у,у), команда В преобразует пару чисел (х,у) в пару (х+у,у), команда С преобразует пару чисел (х,у) в пару (у,х). Составьте алгоритм и программу работы автомата.
C++ Векторы Определите полусумму длин двух векторов А(1,5; 2,5; -0,3) и В(-11,7; -9,3; 2,5; 3,7; -1,2). Вычислите, длины вектора оформив в виде функции. подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
13.02.2012, 11:23
dimmu, всё же я доделал вариант из поста 19, мой недочёт был в том что 430 была 16-ричная а не десятичная запись WCHAR и 430Hex == 1072 что в UTF-8 соответсвует символу 'a' русское. Ниже скрин, код и готовый проект на плюсах, который переводит ваш текст \u0430\u0020\u0437\u0430\u0439\u0434\u0438
Для упрощения вводу - строку текста SMS-ки помещаем в файл sms.txt котрый и на экране а также в файле out.txt получаем готовый текст
Код С++
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <windows.h>
#include <iostream>
#include <fstream>
#include <clocale>
#include <string>
#include <cmath>
using namespace std;
 
char * Utf2Ascii(WCHAR*lpw)
{
    long uLen = WideCharToMultiByte(CP_ACP, 0, lpw,   -1,  NULL, NULL, NULL, NULL);
    char *str = new char[uLen];
                WideCharToMultiByte(CP_ACP, 0, lpw, uLen,  str , uLen, NULL, NULL);
    return str;
}
//Г*        ' ' a+7  a     a+9  a+4  a+8
//0430 0020 0437 0430 0439 0434 0438
int getHEXCode(int code)
{
    int ipow = 0;
    int iHEX = (code%10);
    while(0 <  (code /= 10))
    {
        ipow += 1;
        iHEX += (code%10)*pow(16,1.0*ipow);
    }
    return iHEX;
}
 
int main()
{
    //setlocale(LC_ALL, "Russian");
    system("chcp 1251");
    string text;
    string line;
    WCHAR  *lpw = new WCHAR[2];
    WCHAR  *add = 0;
    char * sout = 0;
    long fpos = -1;
    long code = -1;
    long nchr = 0;
    ofstream ofs;
    ifstream ifs("sms.txt");
    if(!ifs)
        cout<<"ГЌГҐ ìîãó îòêðûòü sms.txt\n";
    else
    {
        while(getline(ifs,line))
            text += line;
        ifs.close();
        cout<<"Г„Г*Г*Г*ûå ГґГ*éëГ* :\n"<<text<<endl;
        while((fpos = text.find("\\u",fpos + 1)) != -1)
        {
            line = text.substr(fpos + 2,4);
            code = atoi(line.c_str());
            lpw[nchr] = getHEXCode(code);
            nchr++;
            //ÄèГ*Г*ìè÷åñêè Г*ëî÷èì ГЇГ*ìÿòü äëÿ lpw
            add = new WCHAR[2];
            lpw[nchr] = add[0];
        }
        lpw[nchr] = 0;
        if(!(sout = Utf2Ascii(lpw)))
            cout<<"ГЋГёГЁГЎГЄГ* ïðåîáðГ*çîâГ*Г*ГЁГї\n";
        else
        {
            cout<<"ÏðåîáðГ*çîâГ*Г*Г*ûå Г¤Г*Г*Г*ûå :\n"<<sout<<endl;
            ofs.open("out.txt");
            if(!ofs)
                cout<<"ГЌГҐ ìîãó ñîçäГ*ГІГј ГґГ*éë out.txt\n";
            else
                ofs<<sout;
            if(ofs)
                ofs.close();
            delete [] sout;
        }
    }
    system("pause");
    return 0;
}


Вот и всё что добавили в изначальный алгоритм
C++
1
2
3
4
5
6
7
8
9
10
11
int getHEXCode(int code)
{
    int ipow = 0;
    int iHEX = (code%10);
    while(0 <  (code /= 10))
    {
        ipow += 1;
        iHEX += (code%10)*pow(16,1.0*ipow);
    }
    return iHEX;
}

Не по теме:

PS:Также предлагаю читающим этот пост обратить внимание на realloc в стиле плюсов

C++
1
2
add = new WCHAR[2];
lpw[nchr] = add[0];
(в разделе экспертов рассматривали рассматривали и так никто и не привёл такой вариант выделения памяти)

Миниатюры
Как перевести строку в читабельный вид?  
Вложения
Тип файла: txt sms.txt (42 байт, 10 просмотров)
Тип файла: rar SMS2Hex.exe.rar (69.6 Кб, 5 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru