Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Русификация консольных приложений



При работе в консольном приложении ввод-вывод выполняется в кодировке ASCII (см. тему "Кодирование символов", кодовые таблицы). В тексте же программы символы отображаются в принятой в Windows кодировке ANSI. Они совпадают только в первой половине кодов (от 0 до 127. Символы национального (русского) алфавита - вторая половина кодов, и поэтому в консоли они отображаются иначе, чем в тексте программы. Для устранения этой проблемы можно использовать:

функцию CharToOem (char *S1, char *S2) для преобразования символов из кодировки ANSI в кодировку ASCII (S1 - исходная строка, S2 - результат);

функцию OemToChar (char *S1, char *S2) для обратного преобразования (S1 - исходная строка, S2 - результат).

Эти функции находятся в библиотеке windows.h. Приведем пример их использования.

...

#include<windows.h>

char buf[100];

void main(void)

{ int a=2;

float r=5.5;

char s[]="Минск!", s1[256];

CharToOem(s, buf);

printf("\n %s ", buf);

printf("\n Vvedi string:");

gets(s1);

printf("\n %s ",s1);

CharToOem("\n Значение а = %d r = %f\n", buf);

printf(buf, a, r); //Вместо строковой вонстанты -

} // массив char

Строки как переменные типа AnsiString.

А) Основные понятия.

В оконных компонентах и функциях C++ Builder'а основным строковым типом является тип AnsiString, который обозначается также просто как String (первая буква большая! Тип string (с малой буквы) - это уже другой похожий тип, из библиотеки STL).

Работа с типом String чаще всего удобнее, чем с массивом char. Однако скорость выполнения операций при работе с большими объемами данных может быть ниже.

Тип String способен хранить строки неограниченного размера. Переменная типа String сама по себе является лишь указателем и занимает 4 байта, а текст строки хранится отдельно от нее, память для него выделяется динамически.

Отдельные символы, входящие в строку типа String, имеют тип char. К ним можно обращаться так же, как к элементам массива, но нумерация начинается с единицы:

String V="Привет!";

char c,d;

c=V[1]; // c='П'

d=V[7]; // c='!'

Текст в переменной типа String не обязательно заканчивается нуль-терминатором. Более того, попытка обращения к несуществующему символу строки (например, в вышеприведенном образце V[0], или V[8]) может вызвать ошибку (в то время как выход за границы массива не проверяется). Поэтому изменять длину строки (например, добавить в нее новый символ) нужно не присваиванием значений отдельным символам, а другими способами, описанными ниже.

В оконном приложении ввод-вывод строк типа String возможен через большинство компонентов (с использованием их соответствующих свойств, например для Edit - свойства Text) без специального преобразования типов:

String s=Edit1->Text;

Edit2->Text=s;

Memo1->Lines->Add(s);





Дата публикования: 2014-11-04; Прочитано: 326 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...