Библиотека String  1.0
Own String library. Лабораторная работа ФБИТ ИТМО
Открытые члены | Друзья | Полный список членов класса
Класс own::IdentStr

Производный от "Строка" класс "Строка-идентификатор". Подробнее...

#include <identstr.h>

Граф наследования:own::IdentStr:
own::String

Открытые члены

 IdentStr (int=0)
 
 IdentStr (const char *)
 
 IdentStr (const IdentStr &)
 
 ~IdentStr ()
 
int getDigitsNum ()
 
IdentStroperator= (const IdentStr &)
 
- Открытые члены унаследованные от own::String
 String (int=0)
 
 String (const char *)
 
 String (char)
 
 String (const String &)
 
 ~String ()
 
char * getStr () const
 
int getLen () const
 
void show () const
 
char getChar (int) const
 

Друзья

IdentStr operator& (const IdentStr &, const IdentStr &)
 
IdentStr operator& (const char *, const IdentStr &)
 
IdentStr operator& (const IdentStr &, const char *)
 

Дополнительные унаследованные члены

- Защищенные данные унаследованные от own::String
int len
 Длина строки
 
char * pCh
 Адрес динамически выделенной памяти для размещения символов строки
 

Подробное описание

Производный от "Строка" класс "Строка-идентификатор".

Строки данного класса строятся по правилам записи идентификаторов в СИ, и могут включать в себя только те символы, которые могут входить в состав Си-идентификаторов. Если исходные данные противоречат правилам записи идентификатора, то создается пустая "Строка-идентификатор".

См. определение в файле identstr.h строка 23

Конструктор(ы)

◆ IdentStr() [1/3]

own::IdentStr::IdentStr ( int  val = 0)

Конструктор без параметров (длина строки = 0) или принимающий длину строки

Аргументы
[in]lenДлина строки (по умолчанию 0)

См. определение в файле identstr.cpp строка 16

16  : String(val)
17 {
18  std::cout << "IdentStr::IdentStr(int val) : String(val), val = " << val << std::endl;
19 }

◆ IdentStr() [2/3]

own::IdentStr::IdentStr ( const char *  Str)

Конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом)

Аргументы
[in]sСи-строка

См. определение в файле identstr.cpp строка 21

21  : String(Str)
22 {
23  if (!((pCh[0] >= 'a' && pCh[0] <= 'z') || (pCh[0] >= 'A' && pCh[0] <= 'Z') || (pCh[0] == '_'))) {
24  std::cout << "Bad symbol, pCh[0] = " << pCh[0] << std::endl;
25  delete[] pCh;
26  len = 0;
27  pCh = new char[len + 1];
28  pCh[0] = '\0';
29  return;
30  }
31  for (int i = 1; i < len; i++) {
32  if (!((pCh[i] >= 'a' && pCh[i] <= 'z') || (pCh[i] >= 'A' && pCh[i] <= 'Z') || (pCh[i] >= '0' && pCh[i] <= '9') || (pCh[i] == '_'))) {
33  std::cout << "Bad String, pCh[" << i << "] = " << pCh[i] << std::endl;
34  delete[] pCh;
35  len = 0;
36  pCh = new char[len + 1];
37  pCh[0] = '\0';
38  return;
39  }
40  }
41  std::cout << "IdentStr::IdentStr(char* Str) : String(Str)" << std::endl;
42 }

◆ IdentStr() [3/3]

own::IdentStr::IdentStr ( const IdentStr from)

Конструктор копирования

Аргументы
[in]fromИсходный объект

См. определение в файле identstr.cpp строка 44

44  : String(from)
45 {
46  std::cout << "IdentStr::IdentStr(const IdentStr& from) : String(from)" << std::endl;
47 }

◆ ~IdentStr()

own::IdentStr::~IdentStr ( )

Деструктор

См. определение в файле identstr.cpp строка 49

50 {
51  std::cout << "IdentStr::~IdentStr()" << std::endl;
52 }

Методы

◆ getDigitsNum()

int own::IdentStr::getDigitsNum ( )

Подсчет количества цифр в строке

См. определение в файле identstr.cpp строка 54

55 {
56  int digitsNum = 0;
57  for (int i = 1; i < len; i++) {
58  if (pCh[i] >= '0' && pCh[i] <= '9') {
59  digitsNum++;
60  }
61  }
62  return digitsNum;
63 }

◆ operator=()

IdentStr & own::IdentStr::operator= ( const IdentStr S)

Оператор присваивания

См. определение в файле identstr.cpp строка 65

66 {
67  if (&S != this) {
68  delete[] pCh;
69  len = strlen(S.pCh);
70  pCh = new char[len + 1];
71  strcpy(pCh, S.pCh);
72  }
73  std::cout << "IdentStr& IdentStr::operator=(const IdentStr& S)" << std::endl;
74  return *this;
75 }

Документация по друзьям класса и функциям, относящимся к классу

◆ operator& [1/3]

IdentStr operator& ( const char *  pobj1,
const IdentStr pobj2 
)
friend

Объединение строк

Возвращает
Строка, содержащая все символы первой строки и символы второй строки, отсутствующие в первой

См. определение в файле identstr.cpp строка 144

145 {
146  IdentStr tmp1(pobj1);
147  if (tmp1.len == 0) {
148  return IdentStr(0);
149  }
150  return tmp1 & pobj2;
151 }

◆ operator& [2/3]

IdentStr operator& ( const IdentStr pobj1,
const char *  pobj2 
)
friend

Объединение строк

Возвращает
Строка, содержащая все символы первой строки и символы второй строки, отсутствующие в первой

См. определение в файле identstr.cpp строка 104

105 {
106  if (pobj1.len == 0) {
107  IdentStr tmp(pobj2);
108  return tmp;
109  }
110  int pobj2len = strlen(pobj2);
111 
112  bool check[256];
113  memset(check,0,256);
114  for (int i = 0; i < pobj1.len; i++) {
115  check[pobj1.pCh[i]] = true;
116  }
117  char* tmp2 = new char[pobj2len];
118  int j = 0;
119  for (int i = 0; i < pobj2len; i++) {
120  if (!((pobj2[i] >= 'a' && pobj2[i] <= 'z') || (pobj2[i] >= 'A' && pobj2[i] <= 'Z') ||
121  (pobj2[i] >= '0' && pobj2[i] <= '9') || (pobj2[i] == '_'))) {
122  std::cout << "Bad String, pobj2[" << i << "] = " << pobj2[i] << std::endl;
123  IdentStr tmp(0);
124  return tmp;
125  }
126 
127  if (!check[pobj2[i]]) {
128  tmp2[j++] = pobj2[i];
129  }
130  }
131  IdentStr tmp(pobj1.len + j);
132  int i = 0;
133  j = 0;
134  while (i < pobj1.len)
135  tmp.pCh[i++] = pobj1.pCh[j++];
136  j = 0;
137  while (i < tmp.len)
138  tmp.pCh[i++] = tmp2[j++];
139  std::cout << "IdentStr operator&(const IdentStr& pobj1, const char* pobj2)" << std::endl;
140  delete[] tmp2;
141  return tmp;
142 }

◆ operator& [3/3]

IdentStr operator& ( const IdentStr pobj1,
const IdentStr pobj2 
)
friend

Объединение строк

Возвращает
Строка, содержащая все символы первой строки и символы второй строки, отсутствующие в первой

См. определение в файле identstr.cpp строка 77

78 {
79  bool check[256];
80  memset(check,0,256);
81  for (int i = 0; i < pobj1.len; i++) {
82  check[pobj1.pCh[i]] = true;
83  }
84  char* tmp2 = new char[pobj2.len];
85  int j = 0;
86  for (int i = 0; i < pobj2.len; i++) {
87  if (!check[pobj2.pCh[i]]) {
88  tmp2[j++] = pobj2.pCh[i];
89  }
90  }
91  IdentStr tmp(pobj1.len + j);
92  int i = 0;
93  j = 0;
94  while (i < pobj1.len)
95  tmp.pCh[i++] = pobj1.pCh[j++];
96  j = 0;
97  while (i < tmp.len)
98  tmp.pCh[i++] = tmp2[j++];
99  std::cout << "IdentStr operator&(const IdentStr& pobj1, const IdentStr& pobj2)" << std::endl;
100  delete[] tmp2;
101  return tmp;
102 }

Объявления и описания членов классов находятся в файлах:
own::IdentStr::IdentStr
IdentStr(int=0)
Definition: identstr.cpp:16
own::String::pCh
char * pCh
Адрес динамически выделенной памяти для размещения символов строки
Definition: string.h:20
own::String::String
String(int=0)
Definition: string.cpp:15
own::String::len
int len
Длина строки
Definition: string.h:19