Ввод-вывод с использованием неформатного ввода/вывода



Если форматный ввод/вывод позволяет работать с различными типами данных, то неформатный – с символами и строками символов.

Для ввода строк применяется функция - gets (char *string)

Для вывода – puts (char *string),

где string задает область памяти, в которую помещаются символы вводимой строки и откуда они выводятся на экран.

Данные функции подобны функциям printf( ) и scanf( ). Отличие в том, что функция gets( ) передает в программу все символы (и пробел в том числе) до символа ’\n’.

Пример .

 // VU_051.cpp : main project file

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

 void main()

 {

char str[20];

 printf("Enter the text. Max - 20 simbols\n");

 gets (str);

 puts (str);

 }

2.3. Ввод-вывод средствами консольного ввода/вывода языка Си++.

В Си++ в отличие от Си для ввода/вывода используются не функции, а операторы >> и << в сочетании с названиями стандартных потоков cout, cin. Причем ввод выполняется до первого пробельного символа (пробела, табуляции, перевода каретки)

Помимо ввода/вывода со строками с помощью функций можно производить и другие операции. Функции, проводящие операции со строками определены в заголовочном файле <string.h>

Основные действия со строками выполняются в нем с помощью операций и методов, а длина строки изменяется динамически в соответствии с потребностями. Для использования класса необходимо подключить к программе заголовочный файл <string>

Рассмотрим некоторые функции.

strcpy(s,ct)– копирует строку ct в строку s,включая ’\0’; возвращает s.

Здесь и далее ct и s принадлежат типу shar*.

strcat(s,ct)– приписывает ct к s; возвращает s

strcmp(s,ct)– сравнивает sи ct; возвращает

<0, если s<ct;

0, если s = ct;

>0, если s>st. (Сравнение здесь лексикографическое.)

strlen(s)– возвращает длину s.

 

Конструкторы и присваивание строк в классе

В классе string определено несколько конструкторов. Ниже в упрощенном виде приведены заголовки наиболее употребительных:

 String();

 string(const char *) ;

 string(const char *. int n);

 string(string &);

 Первый конструктор создает пустой объект типа string. Второй создает объект типа string на основе строки старого стиля, третий создает объект типа string и записывает туда п символов из строки, указанной первым параметром. Последний конструктор является конструктором копирования, который создает новый объект как копию объекта, переданного ему в качестве параметра. В классе string определены три операции присваивания:

strings operator=(const string& str);

string& operator=(const char* s);

 string& operator=(char c);

Как видно из заголовков, строке можно присваивать другую строку типа string, строку старого стиля или отдельный символ, например:

string sl ;

string s2("Bacя");

string s3(s2);

 sl = 'X';

sl = "Вася";

s2 = s3;

 

Операции

Ниже приведены допустимые для объектов класса string операции:

присваивание =

конкатенация +

равенство ==

 неравенство !=

 меньше <

меньше или равно <=

больше >

 больше или равно >=

 индексация [ ]

 вывод <<

 ввод >>

 добавление +=

 

Синтаксис операций и их действие очевидны. Размеры строк устанавливаются автоматически так, чтобы объект мог содержать присваиваемое ему значение. Надо отметить, что для строк типа string не соблюдается соответствие между адресом первого элемента строки и именем, как это было в случае строк старого стиля, то есть &s[0] не равно s.

Кроме операции индексации, для доступа к элементу строки определена функция at:

string s("Bac я ");

cout « s.at(l); // Будет выведен символ a

Если индекс превышает длину строки, порождается исключение out_of_range. Для работы со строками целиком этих операций достаточно, а для обработки частей строк (например, поиска подстроки, вставки в строку, удаления символов) в классе string определено множество разнообразных методов (функций), наиболее употребительные из которых рассматриваются в следующем разделе.

Функции

функции класса string для удобства рассмотрения можно разбить на несколько категорий: присваивание и добавление частей строк, преобразования строк, поиск подстрок, получение характеристик строк.

5.1 Присваивание и добавление частей строк

Для присваивания части одной строки другой служит функция assign:

assign (const string& str);

assign (const string& str. size_type pos. size_type n):

assign (const char* s. size_type n);

Первая форма функции присваивает строку str вызывающей строке, при этом действие функции эквивалентно операции присваивания:

string s1 ('Bacя"). s2;

s2.assign(sl); // Равносильно s2 = s1:

Вторая форма присваивает вызывающей строке часть строки str, начиная с позиции pos. Если pos больше длины строки, порождается исключение out_of_range. Вызывающей строке присваивается п символов, либо, если pos + n больше, чем длина строки str, все символы до конца строки str.

Третья форма присваивает вызывающей строке п символов строки s старого типа.

Для добавления части одной строки к другой служит функция append:

append (const string& str);

append (const string& str. s1ze_type pos. size_typG n);

append (const char* s. size_type n);

Первая форма функции добавляет строку str к концу вызывающей строки, при этом действие функции эквивалентно операции конкатенации (+).

Вторая форма добавляет к вызывающей строке часть строки str, начиная с позиции pos. Если pos больше длины строки, порождается исключение out_of_range. К вызывающей строке добавляется п символов, либо, если pos + n больше, чем длина строки str, все символы до конца строки str. Если длина результата больше максимально допустимой длины строки, порождается исключение length_error.

Третья форма добавляет к вызывающей строке n символов строки s старого типа

Преобразования строк

Для вставки в одну строку части другой строки служит функция insert :

insert (size__type posl. const string& str);

 insert (size_type posl. const string& str. s1ze_type pos2. size_type n);

insert (size__type pos. const char* s. size_type n);

Первая форма функции вставляет строку str в вызывающую строку, начиная с позиции posl вызывающей строки. Иными словами, вызывающая строка замещается строкой, которая состоит из первых posl символов вызывающей строки, за которыми следует строка str целиком, а после нее располагаются остальные символы вызывающей строки.

Вторая форма функции вставляет в вызывающую строку часть строки str, начиная с позиции posl вызывающей строки. Вызывающая строка замещается строкой, которая состоит из первых posl символов вызывающей строки, за которыми следуют п элементов строки str, начиная с позиции pos2, а после них располагаются остальные символы вызывающей строки.

Третья форма функции вставляет в вызывающую строку n элементов строки s старого типа, начиная с позиции pos вызывающей строки.

Для удаления части строки служит функция erase:

erase (size_type pos = 0. size_type n = npos);

 Она удаляет из вызывающей строки n элементов, начиная с позиции pos. Если pos не указано, элементы удаляются с начала строки. Если не указано n, удаляется весь остаток строки.

Поиск подстрок

Для поиска в классе string предусмотрено большое разнообразие функций. Ниже приведены основные:

size__type find (const string& str. size_type pos = 0) const;

 // Ищет самое левое вхождение строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию строки или npos, если строка не найдена.

size_type find(char с . s1ze_type pos = 0) const;

// Ищет самое левое вхождение символа с в вызывающую строку, начиная с позиции pos, и возвращает позицию символа или npos, если символ не найден.

size_type rfind (const string& str. size_type pos = npos) const;

//Ищет самое правое вхождение строки str в вызывающую строку, до позиции pos, и возвращает ПОЗИЦРГЮ строки или npos, если строка не найдена.

size_type rf1nd(char с . s1ze_type pos = npos) const;

// Ищет самое правое вхождение символа с в вызывающую строку, до позиции pos, и возвращает позицию символа или npos, если символ не найден.

size_type find_first_of(const string& str. size_type pos = 0) const;

// Ищет самое левое вхождение любого символа строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию символа или npos, если вхождение не найдено.

size_type f1nd_f1rst_of(char с . s1ze_type pos = 0) const;

//Ищет самое левое вхождение символа с в вызывающую строку, начиная с позиции pos, и возвращает позицию символа или npos, если вхождение не найдено.

size_type findJast_of(const string& str. size_type pos = npos) const;

// Ищет самое правое вхождение любого символа строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию символа или npos, если вхождение не найдено.

size_type find_last__of(char с . size_type pos = npos) const;

//Ищет самое правое вхождение символа с в вызывающую строку, начиная с позиции pos, и возвращает позицию символа или npos, если вхождение не найдено

 


Дата добавления: 2021-07-19; просмотров: 119; Мы поможем в написании вашей работы!

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






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