下面是模拟实现字符串的相关功能,它包括一下功能:
String(const char * s);//利用字符串来初始化对象
String(); //默认构造函数
String(const String & s);//复制构造函数,利用String类型来初始化对象
~String(); //析构函数
int length(); //返回String类型中字符串的长度
String & operator=(const String & s);//重载=运算符。
String & operator=(const char *);
char & operator[](int i); //重载【】运算符
const char & operator[](int i) const;
friend bool operator<(const String & st,const String & st2);//重载<运算符,用来比较String类型中字符串的大小。
friend bool operator>(const String & st,const String & st2);
friend bool operator==(const String & st,const String & st2);//重载==运算符,判断两个String对象是否相等
friend ostream & operator<<(ostream & os,const String & st2);//重载输出函数
friend istream & operator>>(istream & is,String & st2);//重载输入函数
static int HowMang()//返回总共生成的String类对象的数目。
String.h:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#ifndef STRING_H_INCLUDED #define STRING_H_INCLUDED #include"iostream" #include<string.h> using std::ostream; using std::istream; class String{ private : char * str; int len; public : static int num_strings; static const int CINLM=80; String( const char * s); String(); String( const String & s); ~String(); int length(); String & operator=( const String & s); String & operator=( const char *); char & operator[]( int i); const char & operator[]( int i) const ; friend bool operator<( const String & st, const String & st2); friend bool operator>( const String & st, const String & st2); friend bool operator==( const String & st, const String & st2); friend ostream & operator<<(ostream & os, const String & st2); friend istream & operator>>(istream & is,String & st2); static int HowMang() { return num_strings; } }; #endif // STRING_H_INCLUDED |
String.cpp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#include<iostream> #include"String.h" #include"string.h" using namespace std; int String::num_strings=0; int String::length() { return this ->len; } String::String( const char * s) { len= strlen (s); str= new char [len+1]; num_strings++; } String::String() { str=0; len=0; num_strings++; } String::String( const String & s) { num_strings++; len= strlen (s.str); str= new char [len+1]; strcpy (str,s.str); } String::~String() { --num_strings; delete [] str; len=0; } String & String::operator=( const String & s) { if ( this ==&s) return * this ; delete [] str; len= strlen (s.str); str= new char [len+1]; strcpy (str,s.str); // num_strings++; } String & String::operator=( const char * s) { len= strlen (s); str= new char [len+1]; strcpy (str,s); // num_strings++; } char & String::operator[]( int i) { return str[i]; } const char & String::operator[]( int i) const { return str[i]; } bool operator<( const String & st, const String & st2) { if ( strcmp (st.str,st2.str)<0) return true ; else return false ; } bool operator>( const String & st, const String & st2) { return (st<st2)== false ; } bool operator==( const String & st, const String & st2) { if ( strcmp (st.str,st2.str)>0) return true ; else return false ; } ostream & operator<<(ostream & os, const String & st2) { os<<st2.str; return os; } istream & operator>>(istream & is,String & st2) { char temp[String::CINLM]; is.get(temp,String::CINLM); if (is) st2=temp; while (is&&is.get()!= '\n' ) continue ; return is; } |
main.cpp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#include <iostream> #include"String.h" using namespace std; int main() { String name[5]; char temp[10]; int i; for (i=0;i<5;i++) { cin.get(temp,10); while (cin&&cin.get()!= '\n' ) continue ; if (!cin&&temp[0]== '\0' ) //如果是空串的话,cin会为false break ; else name[i]=temp; } int total=i; int firs=0,shor=0; if (total<0) { cout<< "没有输入" <<endl; } else { for (i=0;i<total;i++) { cout<<name[i][0]<< ":" <<name[i]<<endl; } for (i=0;i<total;i++) { if (name[i]<name[firs]) firs=i; if (name[i].length()<name[shor].length()) shor=name[i].length(); } } cout<< "最短的字符串为:" <<name[shor]<<endl; cout<< "最前面的字符串为:" <<name[firs]<<endl; return 0; } |
以上这篇自己模拟写C++中的String类型实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。