Задание 2 . Класс string

Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-12 задания 3 из параграфа 1.6, использую класс string.

В С++ описан стандартный класс string, который обеспечивает различные операции для манипулирования строками. Данный класс описывается в заголовочном файле cstring.h.

В классе string имеется несколько конструкторов. Ниаболее употребляемыми из них явлются конструктор, создающий пустую строку - string () и конструктор, создающий строку со значением С-строки - string (const char*).

Например,

string S1, S2; // создали два объекта класса string – пустые строки

string S3 (“Hello!!!”);// создали объект класса string – строку со значение “Hello!!!”

Класс содежит три операции присваивания:

string& opertor=(const srting& str); // присваивание объекта-строка

string& opertor=(const char *str);// присваивание значения С-строки

string& opertor=(char s);// присваивание значения символа

 

Например,

string S4=S3, S5= “Error”, S6= ‘a’;

В классе string опрделена константа NPOS, задающая максимально возможное число, которое в зависимости от конекста означет либо «все элементы строки», либо отрицательный результат поиска.

В классе переопредлены следющие операции

Опреция Значение
= присваивание
+ конкантенация
== (!=) равенство(неравенство)
< (<=) меньше (меньше или равно)
> (>=) больше (больше или равно)
[ ] индексация
<< (>>) вывод(ввод)
+= добавление

 

Пример 1. Ввести с клавиатуры два слова. Если они одинаковы, то вывести на экран их первый символ, в противном случае вывести строку, состоящую из этих слов, разделенных пробелом.

# include <iostream.h>

# include <cstring.h>

 

void main()

{

int k,k1;

string s1,s2;// описали два объекта класса string

cin>>s1>>s2; // считали две слова

if (s1!=s2) // использовали функцию != (не равно)

// класса string

{

string s3=s1+" "+s2+"\n"; //конкатенация строк класса //string для создания новой строки

cout<<s3;

 

}

else cout<<"First = "<<s1[0];

}

Опишем наиболее используемые методы класса string.

Метод size_type[1] size() const и метод size_type length() const возвращают размер строки.

Метод insert (size_type posl, const string & str) вставляет строку str в вызывающую строку, начиная с позиции posl.

Метод replace (size_type posl, size_type n1, const string & str)заменяет n1 элементов, начиная с позиции pos1 вызывающей строки, элементами строки str.

Методstring substr (size_type pos=0, size_type n=NPOS) constвозвращает подстроку длины n, назиная с позиции pos.

Метод size_type find (const string& str, size_type pos=0) const / size_type rfind (const string& str, size_type pos=0) constищет самое левое/правое вхождение строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию вхождения или NPOS, если вхождение не найдено.

Метод size_type find (char с, size_type pos=0) const / size_type find (char с, size_type pos=0) constищет самое левое/ правое вхождение символа с в вызывающую строку, начиная с позиции pos, и возвращает позицию вхождения или NPOS, если вхождение не найдено.

Метод size_type find_first_of (const string& str, size_type pos=0) const/ size_type find_last_of (const string& str, size_type pos=0) constищет самое левое/ правое вхождение любого символа строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию вхождения или NPOS, если вхождение не найдено.

Метод swap (const string& str)обменивает содрежимое вызывающей строки и строи str.

Метод erase (size_type pos=0, size_type n= NPOS)удаляет n элементов, начиная с позиции pos.

Метод clear ()ощищает всю строку.

Метод size_type copy (char * s, size_type n, size_type pos=0) constкопирует в символьный массив s n элементов вызывающей строки, начиная с позиции pos. Возращается количество скопированных элементов.

 

 

Пример 2. Решим задачу из примера 6.3., использую класс string. Вывести слова введенной строки, начинающиеся с гласной буквы, на экран столбиком, без разделительных знаков (пробел, табуляция, точка, запятая и т.п.).

void main ()

{

string s,s1,*s2;//Cоздали два объекта класса

//string и указатель на объект классса string

int k=0;

string razd=" ,.:";

/*Создали объект класса string, с помощью конструктора копирования для хранения разделителей между словами */

string glas="aeoiuy";

/*Создали объект класса string, с помощью конструктора копирования для хранения гласных*/

cout<<"Enter string ";

getline(cin,s);//Считали строку из потока cin

s2=new string [s.length()/2];//Выделили память под

//массив строк

s1=s;

/* Скопировали строку s в строку s1 с помощью переопредленной операции = */

 

int n= s1.find_first_of(razd);

/*Нашли позицию первого разделителя в строке s1*/

while (n!=NPOS)

{

if (n)

{

s2[k]=s1.substr(0,n);

/*Сохранили подстроку до разделителя как очередной элемент массива */

if (glas.find(s2[k][0])!=NPOS)cout<<"\n"<<s2[k];

k++;

}

s1=s1.substr(n+1);

/*Далее рассматриваем только оставшуюся часть строки*/

n=s1.find_first_of(razd);//Нашли позицию очередного

//разделителя

}

s2[k]=s1; //Обработка последнего слова

if (glas.find(s2[k][0])!=NPOS)cout<<"\n"<<s2[k];

}

Отметим, что в данном решении задачи, так же как и в решении задачи в примере 6.3. массив слов введен лишь для демонстрации возможности сохранения слов в массиве для дальнейшей обработки. Однако, в данной задачи не предполагается дальнейшая обработка выделенных из строки слов, поэтому нет необходимости сохранять их в массиве. Поэтому целесообразнее не определять массив строк string *s2, а определить лишь одну строку string s2, которую и использовать для обработки очередного выделенного слова.

 

 








Дата добавления: 2015-10-09; просмотров: 719;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.