русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функции работы со строками


Дата добавления: 2013-12-23; просмотров: 955; Нарушение авторских прав


Строки

Строка состоит из последовательности символов, ограниченных нулевым символом (‘\0’), сохраненная в расположенных последовательно байтах памяти. Иными словами – одномерный символьный массив представляет собой строку символов. В языке С++ существует два вида строк:

- массив символов (строка), завершающаяся нулевым байтом (null-terminated string), унаследованный от С и называемый строки в стиле С.

- строки типа string реализуются объектно-ориентированным подходом к программированию основанные на библиотечном классе string.

Строки первого вида имеют три варианта представления строки:

- массив char;

- константная строка в двоичных кавычках (называемая строковым литералом);

- указатель на char, содержащий адрес начало строки.

В трёх вариантах имя массива является указателем на char. При объявлении строки как массив символов, необходимо размер указать на единицу больше длины предполагаемой последовательности символов. Переменные типа массива символов обладают свойствами, как простой переменной, так и структурированной. Свойствами структурированного типа является обработка каждого элемента массива отдельно, а свойствами простого типа – весь массив обрабатывается целиком, как скалярная переменная. каждая отдельно взятая литера представлена некоторым числом, называемым кодом

Примеры объявления:

char SM = ‘A’; // переменная символьного типа SM инициализируется одной переменной, поэтому она заключена в одинарные кавычки;

char SM1[] = {‘F’,’I’,’L’,’E’,’S’}; //массив символов состоящий из 5 литеров, обладает свойствами массива но свойствами строки не обладает.

char SM2[] = {‘F’,’I’,’L’,’E’,’S’,’\0’}; //наличие нулевого символа придает свойства строки. Этот символ (‘\0’) представляет собой символ с ASCII-кодом 0, служит меткой конца строки.

char SM3[10] = “FILES”; //во время компиляции в ОП выделится 10 байтов памяти. На 0 месте расположится символ F, на первом – I, на 2 – L, на 3 – E, на 4 – S, а с 5 по 9 места автоматически присвоится нулевой символ. Эта строка называется строковой константой или строковым литералом. Строки в кавычках всегда неявно включают ограничивающий нулевой символ



char SM4[] = “FILES”; //под строковую константу SM4 в ОП выделится 6 байтов памяти, последним элементом автоматически установится нулевой байт.

Все имена SM1, SM2, SM3, SM4 имеют адрес элемента стоящего на нулевом месте, обращение к каждому элементу можно осуществлять по его порядковому номеру (SM1[i]). При вводе строковых переменных нулевой байт записывается в конец автоматически. Если же формирование строки происходит в программе, программист должен самостоятельно позаботиться о наличии нулевого байта. Строковая константа (с двойными кавычками) не взаимозаменяема с символьными константами (с одинарными кавычками).

char SM5 = ‘S’; //символьная константа ‘S’ – это сокращенное обозначение для кода символа 83 в системе ASCII, поэтому данный оператор присваивает значение 83 переменной SM5, но “S” представляет строку состоящую из двух символов – S и\0, и еще адрес ОП , по которому размещается строка. Поэтому оператор

char SM5 = “S”; //не соответствие типов.

Функции, которые работают со строками, руководствуются положением нулевого символа, а не размером массива. С++ не накладывает никаких ограничений на длину строки.

Функции для обработки срок работают, проходя по строке символ за символом до тех пор, пока не встретится нулевой символ.

Вывод строки символов:

cout <<SM2<<SM3<<SM4;//выведет каждый раз FILES, т.к. встретит нулевой символ и на этом остановится. Вывод работает как со скалярной переменной.

cout <<SM1; //будет выводить бесконечно, т.к. будет двигаться по памяти, выводя байт за байтом, интерпретируя каждый из них как символ, подлежащий печати, пока не встретит нулевой символ.

Ввод строки символов:

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

#include <iostream>

using namespace std ;

int main ( )

{

char SM2 [100 ],SM3[100];

cin.get(SM2,100);

cin.get(SM3,100);

return 0 ;

}

Поскольку код клавиши ENTER (#13) состоит из двух частей:

1: - признак конца строки;

2: - перевод на новую строку;

первый вызов оставляет символ перевода на новую строку во входной очереди. Символ новой строки оказывается первым символом, который видит следующий вызов. Т.о. второй вызов get() читает символ новой строки и завершает чтение, не прочтя необходимое. На помощь приходит вызов cin.get() без аргументов читает единственный следующий символ, даже если он будет символ новой строки, т.е. следующая последовательность будет работать правильно.

char SM2 [100 ],SM3[100];

cin.get(SM2,100); //читает првую строку

cin.get(); //читает символ перевода строки

cin.get(SM3,100); //читает вторую строку

Другой способ применения состоит в канкатинации двух вызовов функций-членов класса, как показано в следующем примере:

Пример ввода-вывода строк

#include <iostream>

using namespace std ;

int main ( )

{

// объявление и инициализация строки

char SM [ ] = "FILES" ;

cout<<SM<<"\n";

char SM2 [100 ],SM3[100];

cin.get(SM2,100).get();//ввод строки

cout<<SM2<<'\n';

cin.get(SM3,100).get();//ввод строки

cout<<SM3<<'\n';

strcat(SM2,SM3);

printf("\nVVV = %s",SM2);

 

return 0 ;

}

 



<== предыдущая лекция | следующая лекция ==>
Организация динамического двумерного массива | Определяет длину строки


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.