Ввод-вывод с использованием неформатного ввода/вывода
Если форматный ввод/вывод позволяет работать с различными типами данных, то неформатный – с символами и строками символов.
Для ввода строк применяется функция - 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!