ЧАСТЬ 3

ИНФОРМАТИКА

Электронное учебно-методическое пособие

 

 
 

 

5.5. Строковые данные в Borland C++ Builder
и методы их обработки

Объекты класса Ansistring, в первом приближении, можно рассматривать как обычные переменные символьного типа. Их можно складывать (операция конкатенации) и сравнивать, используя естественные операции отношения. С помощью различного рода конструкторов класса такие переменные можно объявлять и присваивать им различные начальные значения [18]:



На указание длины строки выделены 4 байта, что позволяет работать со строками, на длину которых накладывает ограничение лишь размер оперативной памяти. Имеется возможность хранения и обработки двухбайтовых символов таблицы UNICODE. В help-материалах им соответствует аббревиатура MBCS – Multi-Byte Character Set (многобайтный набор символов).

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

Ansistring s1, s2 = "ABCDEFGH";

Длинную строку можно заполнить заданным символом с помощью метода stringOfChar, первый аргумент которого задаёт код символа-заполнителя, а второй — количество повторений:

s1.StringOfChar('=',20);

ВСВ-программа имеет доступ к любому символу длинной строки:

s1=s2[4];

Индексы длинной строки отсчитываются от 1, поэтому в результате приведённого выше оператора присваивания в переменной s1 окажется буква Е. С помощью метода Length можно определить количество символов в ANSI-строке:

int k=as.Length();

Нулевая длина соответствует пустой, не инициализированной строке. Узнать об этом можно и с помощью метода IsEmpty, выдающего значение true, если анализируемая строка пуста:

bool b1=s1.IsEmpty();

Указатель на последний значащий символ можно получить, не обращаясь к определению длины:

char *k;
k=s1.AnsiLastChar() ;

Три метода TrimLeft, TrimRight и Trim позволяют отсечь либо только лидирующие (слева), либо только хвостовые (справа), либо и головные, и хвостовые пробелы.

Для отсечения k-символов с конца строки (среди них могут находиться и не только пробелы) можно воспользоваться методом setLength:

s1.SetLength(3);

Аргумент этой функции устанавливает новую длину, которая не может быть больше числа символов, находившихся в s1.

Для добавления новых символов к концу строки используется операция конкатенации:

AnsiString s1="Привет!"; s1=s1+" Вася"; s1 += " и Петя";

В строке типа Ansistring можно выделить (метод Substring) или удалить (метод Delete) подстроку заданной длины d, начинающуюся символом с индексом j:

s2=s1.Substring(j, d); s1. Delete(j, d);

Вставка подстроки s2 в строку s1 после символа s1[j] осуществляется следующим образом:

s1.Insert (s2,j) ;

Для поиска индекса первого вхождения строки s2 в строку s1 используется метод AnsiPos или POS:

AnsiString s1="Abcdefgh", s2="cd", s3="cb";
int k=s1.AnsiPos(s2); // результат k=3
int j=Pos(s1,s3); // результат j=0

Над данными типа Ansistring можно выполнять любые сравнения, используя стандартные операции отношения – >, >=, <, <=, ==, !=. Методы типа AnsiCompare и AnsicompareIC могут привести к неожиданным результатам из-за использования других кодировочных таблиц:

AnsiString s1="a",s2="A"; int k=s1.AnsiCompare(s2);

В этом примере k = -1, что свидетельствует о соотношении s1 < s2. Метод AnsicompareIC игнорирует разницу между кодами больших и малых букв.

В классе Ansistring предусмотрено довольно много различных преобразований типов данных:


int v = s.ToInt(); // перевод строки в целое число
int v = s.IntDef(int d); // то же самое, при ошибке в данных
// выдаёт значение d по умолчанию

double v = s.ToDouble(); // перевод строки в вещественное число
s1 = InToHex(100,5); // (10)>(16), результат = "00064" s1 = CurrToStr(1.5);

// результат = "1,5"

s1 = AnsiString(v); // перевод в строку данных любого типа
s1 = FloatToStrF(1993.14159265,формат,n1,n2)

В последнем преобразовании значения первого аргумента в строку участвуют форматный указатель, количество верных значащих цифр (n1) и общее количество цифр в дробной части (n2).

Результаты этого преобразования на конкретных данных приведены в табл. 5.2.

Одним из наиболее часто используемых методов преобразования ANSI-строк в обычные строки С, заканчивающиеся нулевым байтом, является процедура c_str(). Она применяется в тех случаях, когда вызываемая функция в качестве аргумента ожидает указатель на массив типа char: printf("%s",s.c_str());

С помощью методов Lowercase и Uppercase производится замена кодов латинских букв на коды малых или больших букв.

 

 


© Сибирская государственная геодезическая академия (СГГА), 2011