Библиотека String
1.0
Own String library. Лабораторная работа ФБИТ ИТМО
string
src
identstr.cpp
См. документацию.
1
/*!
2
\file
3
\brief Реализация методов класса "Строка-идентификатор"
4
5
Данный файл содержит в себе реализации методов производного
6
от "Строка" класса "Строка-идентификатор"
7
*/
8
#include <iostream>
9
#include <cstring>
10
11
#include "
own/string.h
"
12
#include "
own/identstr.h
"
13
14
namespace
own {
15
16
IdentStr::IdentStr
(
int
val) :
String
(val)
17
{
18
std::cout <<
"IdentStr::IdentStr(int val) : String(val), val = "
<< val << std::endl;
19
}
20
21
IdentStr::IdentStr
(
const
char
* Str) :
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
}
43
44
IdentStr::IdentStr
(
const
IdentStr
& from) :
String
(from)
45
{
46
std::cout <<
"IdentStr::IdentStr(const IdentStr& from) : String(from)"
<< std::endl;
47
}
48
49
IdentStr::~IdentStr
()
50
{
51
std::cout <<
"IdentStr::~IdentStr()"
<< std::endl;
52
}
53
54
int
IdentStr::getDigitsNum
()
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
}
64
65
IdentStr
&
IdentStr::operator=
(
const
IdentStr
& S)
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
}
76
77
IdentStr
operator&
(
const
IdentStr
& pobj1,
const
IdentStr
& pobj2)
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
}
103
104
IdentStr
operator&
(
const
IdentStr
& pobj1,
const
char
* pobj2)
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
}
143
144
IdentStr
operator&
(
const
char
* pobj1,
const
IdentStr
& pobj2)
145
{
146
IdentStr
tmp1(pobj1);
147
if
(tmp1.
len
== 0) {
148
return
IdentStr
(0);
149
}
150
return
tmp1 & pobj2;
151
}
152
153
}
own::IdentStr
Производный от "Строка" класс "Строка-идентификатор".
Definition:
identstr.h:24
own::IdentStr::IdentStr
IdentStr(int=0)
Definition:
identstr.cpp:16
own::String
Базовый класс "Строка".
Definition:
string.h:17
string.h
Заголовочный файл с описанием класса "Строка".
own::IdentStr::getDigitsNum
int getDigitsNum()
Definition:
identstr.cpp:54
own::String::pCh
char * pCh
Адрес динамически выделенной памяти для размещения символов строки
Definition:
string.h:20
own::operator&
IdentStr operator&(const IdentStr &pobj1, const IdentStr &pobj2)
Definition:
identstr.cpp:77
own::String::len
int len
Длина строки
Definition:
string.h:19
own::IdentStr::operator=
IdentStr & operator=(const IdentStr &)
Definition:
identstr.cpp:65
own::IdentStr::~IdentStr
~IdentStr()
Definition:
identstr.cpp:49
identstr.h
Заголовочный файл с описанием класса "Строка-идентификатор".
Создано системой
1.8.20