Строковые данные в языке Си как массивы символов. Стандартные функции работы со строками.



В языке С++ имеются следующие типы данных для работы со строками:

1) одномерный массив char;

2) специальный тип string, который в свою очередь существует в разных вариантах, соответствующих различным стандартам:

a) AnsiString;

b) string из библиотеки STL.

Все перечисленные типы поддерживаются компилятором C++ Builder'а.

Строки как нуль-терминированные массивы char.

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

Один из способов организовать работу со строками - это использование одномерных массивов типа char. Тогда строка символов – это одномерный массив типа char, заканчивающийся нулевым байтом.

Нулевой байт – это байт, каждый бит которого равен нулю, при этом для нулевого байта определена символьная константа ´\0´ (признак окончания строки, или нуль-терминатор). По нулевому байту функции, работающие со строками, определяют место окончания строки. Если они читают строку, то воспринимают ее только до первого нуль-терминатора; если они создают строку, то записывают нуль-терминатор в ее конец.

Поэтому, если строка должна содержать максимум k символов, то в описании массива необходимо указать k+1 элемент. Например, char a[7]; - означает, что строка может содержать от 0 до 6 символов, а один байт будет занимать нуль-терминатор.

Строковая константа – это набор символов, заключенных в двойные кавычки, например: "Работа со строками". Такие константы хранятся именно как массивы типа char. В конце строковой константы явно указывать символ ´\0´ не нужно (он будет добавлен автоматически в ходе компиляции).

Строковые константы можно использовать при инициализации массивов:

сhar S[]="Работа со строками";

В этом примере размер массива не указан, поэтому он будет определен автоматически (19 элементов).

 

Б) Ввод-вывод строк - массивов char.

Для ввода с консоли строк - массивов char обычно используются две стандартные функции:

scanf() (см. тему "Функции ввода-вывода"; спецификатор ввода %s; символ «&» перед именем массива типа char указывать не надо).Значения вводятся до появления первого символа “пробел”, а если его нет - до конца строки;

gets(char *S)  (запись"char *S" означает, что на ее место нужно подставить массив типа char; можно также подставить указатель на char - см. тему "Указатели"). Значения вводятся до конца вводимой строки (т.е., в отличие от scanf(),может вводить строку с пробелами как единое целое).

Обе функции автоматически ставят в конец строки нулевой байт.

Вывод строк производится функциями printf() или puts() до первого нулевого байта (‘\0’):

printf()(см. тему "Функции ввода-вывода"; спецификатор вывода %s) не переводит курсор после вывода на начало новой строки;

puts(char *S) автоматически переводит курсор после вывода строковой информации в начало новой строки.

Например:

char Str[30];

printf("Введите строку без пробелов : \n");

scanf("%s",Str);

или

puts("Введите строку");

gets(Str);

В оконныхприложенияхC++ Builder'а изображаемый на экране текст, как правило, имеет тип String (или при необходимости автоматически преобразуется в String). Для вывода туда строки - массива char обычно достаточно просто подставить ее имя в функцию вывода:

Edit1->Text=Str;

Но для ввода оттуда такой строки необходимо использовать преобразование типов и копирование (объяснение см. ниже):

strcpy(Str, Edit1->Text.c_str());

 

Тип String. Операции с типом String. Методы класса String.

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

В оконных компонентах и функциях C++ Builder'а основным строковым типом является тип AnsiString, который обозначается также просто как String .

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

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

Б) Действия над типом String.

Основными операциями с типом String являются:

1) Присваивание: S1=S2;

                    

2) Сравнение:S1==S2, S1<=S2, S1!=S2 и т.д.

Здесь знак < означает предшествование по алфавиту. Равенство означает точное совпадение строк.

3) Сцепление : S1+S2 

Допустимы и операции присваивания вида S1+=S2.

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

Основные методы типа String (и типы их результатов, если они есть):

int Length() - длина строки (количество символов в ней);

String SubString(int i, int n) - копирует из строки подстроку, начиная с i-ой позиции, длиной n символов. Исходная строка не изменяется. (Если в исходной строке, начиная с i-ой позиции, содержится меньше n символов, метод выделяет столько символов, сколько есть).

Insert(String S2, int i) - вставляет строку S2 в середину строки, начиная с i-ой позиции;

Delete(int i, int n) - удаляет из строки n символов, начиная с i-ой позиции. (Если в исходной строке, начиная с i-ой позиции, содержится меньше n символов, метод удаляет имеющиеся символы с i-ой позиции).

int Pos(String S2) - ищет первое вхождение подстроки S2 в данной строке. Результат - номер позиции, начиная с которой в строке содержится S2, либо 0, если S2 в ней не содержится.

char * c_str() - преобразует строку к типу "массив char" (см. ниже).

Наряду с методами, для типа String существуют также функции, например функции преобразования к заданному регистру. Они преобразуют не только латинские, но и русские буквы. Они могут применяться с целью регистро-нечувствительного сравнения:

String AnsiUpperCase (String S); ее результат получается из строки S преобразованием всех букв к верхнему регистру (большие буквы);

String AnsiLowerCase (String S); ее результат получается из строки S преобразованием всех букв к нижнему регистру (малые буквы);

                       


Дата добавления: 2018-08-06; просмотров: 816; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!