Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
При работе в консольном приложении ввод-вывод выполняется в кодировке 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!