# [C + + Primer Plus] answers to programming exercises – Chapter 12

Time：2021-10-12
``````1 // chapter12_1_cow.h
2
3
4 #ifndef LEARN_CPP_CHAPTER12_1_COW_H
5 #define LEARN_CPP_CHAPTER12_1_COW_H
6
7 class Cow {
8 private:
9     char name_[20];
10     char * hobby_;
11     double weight_;
12 public:
13     Cow();
14     Cow(const char * name, const char * hobby, double weight);
15     Cow(const Cow & c);
16     ~Cow();
17     Cow & operator=(const Cow & c);
18     void showcow() const;
19 };
20
21
22 #endif //LEARN_CPP_CHAPTER12_1_COW_H
23
24
25 // chapter12_1_cow.cpp
26
27 #include "chapter12_1_cow.h"
28 #include
29 #include
30
31 Cow::Cow() {
32     name_[0] = '1 // chapter12_1_cow.h
2
3
4 #ifndef LEARN_CPP_CHAPTER12_1_COW_H
5 #define LEARN_CPP_CHAPTER12_1_COW_H
6
7 class Cow {
8 private:
9     char name_[20];
10     char * hobby_;
11     double weight_;
12 public:
13     Cow();
14     Cow(const char * name, const char * hobby, double weight);
15     Cow(const Cow & c);
16     ~Cow();
17     Cow & operator=(const Cow & c);
18     void showcow() const;
19 };
20
21
22 #endif //LEARN_CPP_CHAPTER12_1_COW_H
23
24
25 // chapter12_1_cow.cpp
26
27 #include "chapter12_1_cow.h"
28 #include
29 #include
30
31 Cow::Cow() {
32     name_[0] = '\0';
33     hobby_ = nullptr;
34     weight_ = 0;
35 }
36
37 Cow::Cow(const char * name, const char * hobby, double weight) {
38     strcpy(name_, name);
39     hobby_ = new char[strlen(hobby)];
40     strcpy(hobby_, hobby);
41     weight_ = weight;
42 }
43
44 Cow::Cow(const Cow &c) {
45     strcpy(name_, c.name_);
46     if (!hobby_) delete [] hobby_;
47     hobby_ = new char[strlen(c.hobby_)];
48     strcpy(hobby_, c.hobby_);
49     weight_ = c.weight_;
50 }
51
52 Cow::~Cow() {
53     delete [] hobby_;
54 }
55
56 Cow & Cow::operator=(const Cow & c) {
57     strcpy(name_, c.name_);
58     if (!hobby_) delete [] hobby_;
59     hobby_ = new char[strlen(c.hobby_)];
60     strcpy(hobby_, c.hobby_);
61     weight_ = c.weight_;
62     return *this;
63 }
64
65 void Cow::showcow() const {
66     using namespace std;
67     cout << "name: " << name_ << endl
68         << "hobby: " << hobby_ << endl
69         << "weight: " << weight_ << endl;
70 }
71
72 // run
73
74 void ch12_1() {
75     Cow a("nma", "tennis", 70);
76     Cow b("nmb", "football", 65);
77     a.showcow();
78     b.showcow();
79     b = a;
80     b.showcow();
81     Cow c(a);
82     c.showcow();
83 }';
33     hobby_ = nullptr;
34     weight_ = 0;
35 }
36
37 Cow::Cow(const char * name, const char * hobby, double weight) {
38     strcpy(name_, name);
39     hobby_ = new char[strlen(hobby)];
40     strcpy(hobby_, hobby);
41     weight_ = weight;
42 }
43
44 Cow::Cow(const Cow &c) {
45     strcpy(name_, c.name_);
46     if (!hobby_) delete [] hobby_;
47     hobby_ = new char[strlen(c.hobby_)];
48     strcpy(hobby_, c.hobby_);
49     weight_ = c.weight_;
50 }
51
52 Cow::~Cow() {
53     delete [] hobby_;
54 }
55
56 Cow & Cow::operator=(const Cow & c) {
57     strcpy(name_, c.name_);
58     if (!hobby_) delete [] hobby_;
59     hobby_ = new char[strlen(c.hobby_)];
60     strcpy(hobby_, c.hobby_);
61     weight_ = c.weight_;
62     return *this;
63 }
64
65 void Cow::showcow() const {
66     using namespace std;
67     cout << "name: " << name_ << endl
68         << "hobby: " << hobby_ << endl
69         << "weight: " << weight_ << endl;
70 }
71
72 // run
73
74 void ch12_1() {
75     Cow a("nma", "tennis", 70);
76     Cow b("nmb", "football", 65);
77     a.showcow();
78     b.showcow();
79     b = a;
80     b.showcow();
81     Cow c(a);
82     c.showcow();
83 }``````
``````// chapter12_2_string2.h

#ifndef LEARN_CPP_CHAPTER12_2_STRING2_H
#define LEARN_CPP_CHAPTER12_2_STRING2_H

#include
using std::istream;
using std::ostream;

class string2 {
private:
char * str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
string2();
string2(const string2 & s);
string2(const char * s);
~string2();
int length() const {return len;}
int charnum(char ch) const; // d
string2 & stringlow(); // b
string2 & stringup(); // c

string2 & operator=(const string2 & s);
string2 & operator=(const char * s);
char & operator[](int i);
const char & operator[](int i) const;

friend bool operator(const string2 & s1, const string2 & s2);
friend bool operator==(const string2 & s1, const string2 & s2);
friend ostream & operator<>(istream & is, string2 & s);
friend string2 & operator+(string2 & s1, const string2 & s2); // a

static int howmany();
};

#endif //LEARN_CPP_CHAPTER12_2_STRING2_H

// chapter12_2_string2.cpp

#include "chapter12_2_string2.h"

#include
#include

int string2::num_strings = 0;

string2::string2() {
len = 4;
str = new char[1];
str[0] = '// chapter12_2_string2.h
#ifndef LEARN_CPP_CHAPTER12_2_STRING2_H
#define LEARN_CPP_CHAPTER12_2_STRING2_H
#include
using std::istream;
using std::ostream;
class string2 {
private:
char * str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
string2();
string2(const string2 & s);
string2(const char * s);
~string2();
int length() const {return len;}
int charnum(char ch) const; // d
string2 & stringlow(); // b
string2 & stringup(); // c
string2 & operator=(const string2 & s);
string2 & operator=(const char * s);
char & operator[](int i);
const char & operator[](int i) const;
friend bool operator(const string2 & s1, const string2 & s2);
friend bool operator==(const string2 & s1, const string2 & s2);
friend ostream & operator<>(istream & is, string2 & s);
friend string2 & operator+(string2 & s1, const string2 & s2); // a
static int howmany();
};
#endif //LEARN_CPP_CHAPTER12_2_STRING2_H
// chapter12_2_string2.cpp
#include "chapter12_2_string2.h"
#include
#include
int string2::num_strings = 0;
string2::string2() {
len = 4;
str = new char[1];
str[0] = '\0';
++ num_strings;
}
string2::string2(const string2 &s) {
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
++ num_strings;
}
string2::string2(const char *s) {
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
++ num_strings;
}
string2::~string2() {
delete [] str;
-- num_strings;
}
string2 &string2::operator=(const string2 &s) {
if (this == &s)
return *this;
delete [] str;
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
return *this;
}
string2 &string2::operator=(const char *s) {
delete [] str;
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
return *this;
}
char &string2::operator[](int i) {
return str[i];
}
const char &string2::operator[](int i) const {
return str[i];
}
int string2::howmany() {
return num_strings;
}
bool operator(const string2 & s1, const string2 & s2) {
return s2 < s1;
}
bool operator==(const string2 & s1, const string2 & s2) {
return (std::strcmp(s1.str, s2.str) == 0);
}
ostream & operator<>(istream & is, string2 & s) {
char temp[string2::CINLIM];
is.get(temp, string2::CINLIM);
if (is)
s = temp;
while (is && is.get() != '\n')
continue;
return is;
}
int string2::charnum(char ch) const {
int i = 0, num = 0;
while (str[i] != '\0') {
if (str[i] == ch)
++ num;
++ i;
}
return num;
}
string2 &string2::stringlow() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::toupper(str[i]);
++ i;
}
return *this;
}
string2 &string2::stringup() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::tolower(str[i]);
++ i;
}
return *this;
}
string2 & operator+(string2 & s1, const string2 & s2) {
char * temp = new char[s1.len];
std::strcpy(temp, s1.str);
delete [] s1.str;
s1.str = new char[s1.len + s2.len + 1];
s1.len += s2.len;
std::strcpy(s1.str, temp);
std::strcat(s1.str, s2.str);
return s1;
}
// run
void ch12_2() {
using namespace std;
string2 s1(" and I am a C++ student.");
string2 s3;
cout << s2;
cin >> s3;
string2 t("My name is ");
s2 = t + s3;
cout << s2 << ".\n";
s2 = s2 + s1;
s2.stringup();
cout << "The string\n" << s2 << "\ncontains " << s2.charnum('A')
<< " 'A' characters in it.\n";
s1 = "red";
string2 rgb[3] = {string2(s1), string2("green"), string2("blue")};
cout << "Enter the name of a primary color for mixing light: ";
string2 ans;
bool success = false;
while (cin >> ans) {
ans.stringlow();
for (int i = 0; i < 3; ++ i) {
if (ans == rgb[i]) {
cout << "That's right!\n";
success = true;
break;
}
}
if (success)
break;
else
cout << "Try again!\n";
}
cout << "Bye\n";
}';
++ num_strings;
}

string2::string2(const string2 &s) {
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
++ num_strings;
}

string2::string2(const char *s) {
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
++ num_strings;
}

string2::~string2() {
delete [] str;
-- num_strings;
}

string2 &string2::operator=(const string2 &s) {
if (this == &s)
return *this;
delete [] str;
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
return *this;
}

string2 &string2::operator=(const char *s) {
delete [] str;
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
return *this;
}

char &string2::operator[](int i) {
return str[i];
}

const char &string2::operator[](int i) const {
return str[i];
}

int string2::howmany() {
return num_strings;
}

bool operator(const string2 & s1, const string2 & s2) {
return s2 < s1;
}

bool operator==(const string2 & s1, const string2 & s2) {
return (std::strcmp(s1.str, s2.str) == 0);
}

ostream & operator<>(istream & is, string2 & s) {
char temp[string2::CINLIM];
is.get(temp, string2::CINLIM);
if (is)
s = temp;
while (is && is.get() != '\n')
continue;
return is;
}

int string2::charnum(char ch) const {
int i = 0, num = 0;
while (str[i] != '// chapter12_2_string2.h
#ifndef LEARN_CPP_CHAPTER12_2_STRING2_H
#define LEARN_CPP_CHAPTER12_2_STRING2_H
#include
using std::istream;
using std::ostream;
class string2 {
private:
char * str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
string2();
string2(const string2 & s);
string2(const char * s);
~string2();
int length() const {return len;}
int charnum(char ch) const; // d
string2 & stringlow(); // b
string2 & stringup(); // c
string2 & operator=(const string2 & s);
string2 & operator=(const char * s);
char & operator[](int i);
const char & operator[](int i) const;
friend bool operator(const string2 & s1, const string2 & s2);
friend bool operator==(const string2 & s1, const string2 & s2);
friend ostream & operator<>(istream & is, string2 & s);
friend string2 & operator+(string2 & s1, const string2 & s2); // a
static int howmany();
};
#endif //LEARN_CPP_CHAPTER12_2_STRING2_H
// chapter12_2_string2.cpp
#include "chapter12_2_string2.h"
#include
#include
int string2::num_strings = 0;
string2::string2() {
len = 4;
str = new char[1];
str[0] = '\0';
++ num_strings;
}
string2::string2(const string2 &s) {
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
++ num_strings;
}
string2::string2(const char *s) {
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
++ num_strings;
}
string2::~string2() {
delete [] str;
-- num_strings;
}
string2 &string2::operator=(const string2 &s) {
if (this == &s)
return *this;
delete [] str;
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
return *this;
}
string2 &string2::operator=(const char *s) {
delete [] str;
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
return *this;
}
char &string2::operator[](int i) {
return str[i];
}
const char &string2::operator[](int i) const {
return str[i];
}
int string2::howmany() {
return num_strings;
}
bool operator(const string2 & s1, const string2 & s2) {
return s2 < s1;
}
bool operator==(const string2 & s1, const string2 & s2) {
return (std::strcmp(s1.str, s2.str) == 0);
}
ostream & operator<>(istream & is, string2 & s) {
char temp[string2::CINLIM];
is.get(temp, string2::CINLIM);
if (is)
s = temp;
while (is && is.get() != '\n')
continue;
return is;
}
int string2::charnum(char ch) const {
int i = 0, num = 0;
while (str[i] != '\0') {
if (str[i] == ch)
++ num;
++ i;
}
return num;
}
string2 &string2::stringlow() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::toupper(str[i]);
++ i;
}
return *this;
}
string2 &string2::stringup() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::tolower(str[i]);
++ i;
}
return *this;
}
string2 & operator+(string2 & s1, const string2 & s2) {
char * temp = new char[s1.len];
std::strcpy(temp, s1.str);
delete [] s1.str;
s1.str = new char[s1.len + s2.len + 1];
s1.len += s2.len;
std::strcpy(s1.str, temp);
std::strcat(s1.str, s2.str);
return s1;
}
// run
void ch12_2() {
using namespace std;
string2 s1(" and I am a C++ student.");
string2 s3;
cout << s2;
cin >> s3;
string2 t("My name is ");
s2 = t + s3;
cout << s2 << ".\n";
s2 = s2 + s1;
s2.stringup();
cout << "The string\n" << s2 << "\ncontains " << s2.charnum('A')
<< " 'A' characters in it.\n";
s1 = "red";
string2 rgb[3] = {string2(s1), string2("green"), string2("blue")};
cout << "Enter the name of a primary color for mixing light: ";
string2 ans;
bool success = false;
while (cin >> ans) {
ans.stringlow();
for (int i = 0; i < 3; ++ i) {
if (ans == rgb[i]) {
cout << "That's right!\n";
success = true;
break;
}
}
if (success)
break;
else
cout << "Try again!\n";
}
cout << "Bye\n";
}') {
if (str[i] == ch)
++ num;
++ i;
}
return num;
}

string2 &string2::stringlow() {
int i = 0;
while (str[i] != '// chapter12_2_string2.h
#ifndef LEARN_CPP_CHAPTER12_2_STRING2_H
#define LEARN_CPP_CHAPTER12_2_STRING2_H
#include
using std::istream;
using std::ostream;
class string2 {
private:
char * str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
string2();
string2(const string2 & s);
string2(const char * s);
~string2();
int length() const {return len;}
int charnum(char ch) const; // d
string2 & stringlow(); // b
string2 & stringup(); // c
string2 & operator=(const string2 & s);
string2 & operator=(const char * s);
char & operator[](int i);
const char & operator[](int i) const;
friend bool operator(const string2 & s1, const string2 & s2);
friend bool operator==(const string2 & s1, const string2 & s2);
friend ostream & operator<>(istream & is, string2 & s);
friend string2 & operator+(string2 & s1, const string2 & s2); // a
static int howmany();
};
#endif //LEARN_CPP_CHAPTER12_2_STRING2_H
// chapter12_2_string2.cpp
#include "chapter12_2_string2.h"
#include
#include
int string2::num_strings = 0;
string2::string2() {
len = 4;
str = new char[1];
str[0] = '\0';
++ num_strings;
}
string2::string2(const string2 &s) {
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
++ num_strings;
}
string2::string2(const char *s) {
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
++ num_strings;
}
string2::~string2() {
delete [] str;
-- num_strings;
}
string2 &string2::operator=(const string2 &s) {
if (this == &s)
return *this;
delete [] str;
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
return *this;
}
string2 &string2::operator=(const char *s) {
delete [] str;
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
return *this;
}
char &string2::operator[](int i) {
return str[i];
}
const char &string2::operator[](int i) const {
return str[i];
}
int string2::howmany() {
return num_strings;
}
bool operator(const string2 & s1, const string2 & s2) {
return s2 < s1;
}
bool operator==(const string2 & s1, const string2 & s2) {
return (std::strcmp(s1.str, s2.str) == 0);
}
ostream & operator<>(istream & is, string2 & s) {
char temp[string2::CINLIM];
is.get(temp, string2::CINLIM);
if (is)
s = temp;
while (is && is.get() != '\n')
continue;
return is;
}
int string2::charnum(char ch) const {
int i = 0, num = 0;
while (str[i] != '\0') {
if (str[i] == ch)
++ num;
++ i;
}
return num;
}
string2 &string2::stringlow() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::toupper(str[i]);
++ i;
}
return *this;
}
string2 &string2::stringup() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::tolower(str[i]);
++ i;
}
return *this;
}
string2 & operator+(string2 & s1, const string2 & s2) {
char * temp = new char[s1.len];
std::strcpy(temp, s1.str);
delete [] s1.str;
s1.str = new char[s1.len + s2.len + 1];
s1.len += s2.len;
std::strcpy(s1.str, temp);
std::strcat(s1.str, s2.str);
return s1;
}
// run
void ch12_2() {
using namespace std;
string2 s1(" and I am a C++ student.");
string2 s3;
cout << s2;
cin >> s3;
string2 t("My name is ");
s2 = t + s3;
cout << s2 << ".\n";
s2 = s2 + s1;
s2.stringup();
cout << "The string\n" << s2 << "\ncontains " << s2.charnum('A')
<< " 'A' characters in it.\n";
s1 = "red";
string2 rgb[3] = {string2(s1), string2("green"), string2("blue")};
cout << "Enter the name of a primary color for mixing light: ";
string2 ans;
bool success = false;
while (cin >> ans) {
ans.stringlow();
for (int i = 0; i < 3; ++ i) {
if (ans == rgb[i]) {
cout << "That's right!\n";
success = true;
break;
}
}
if (success)
break;
else
cout << "Try again!\n";
}
cout << "Bye\n";
}') {
if (std::isalpha(str[i]))
str[i] = std::toupper(str[i]);
++ i;
}
return *this;
}

string2 &string2::stringup() {
int i = 0;
while (str[i] != '// chapter12_2_string2.h
#ifndef LEARN_CPP_CHAPTER12_2_STRING2_H
#define LEARN_CPP_CHAPTER12_2_STRING2_H
#include
using std::istream;
using std::ostream;
class string2 {
private:
char * str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
string2();
string2(const string2 & s);
string2(const char * s);
~string2();
int length() const {return len;}
int charnum(char ch) const; // d
string2 & stringlow(); // b
string2 & stringup(); // c
string2 & operator=(const string2 & s);
string2 & operator=(const char * s);
char & operator[](int i);
const char & operator[](int i) const;
friend bool operator(const string2 & s1, const string2 & s2);
friend bool operator==(const string2 & s1, const string2 & s2);
friend ostream & operator<>(istream & is, string2 & s);
friend string2 & operator+(string2 & s1, const string2 & s2); // a
static int howmany();
};
#endif //LEARN_CPP_CHAPTER12_2_STRING2_H
// chapter12_2_string2.cpp
#include "chapter12_2_string2.h"
#include
#include
int string2::num_strings = 0;
string2::string2() {
len = 4;
str = new char[1];
str[0] = '\0';
++ num_strings;
}
string2::string2(const string2 &s) {
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
++ num_strings;
}
string2::string2(const char *s) {
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
++ num_strings;
}
string2::~string2() {
delete [] str;
-- num_strings;
}
string2 &string2::operator=(const string2 &s) {
if (this == &s)
return *this;
delete [] str;
len = s.length();
str = new char[len + 1];
std::strcpy(str, s.str);
return *this;
}
string2 &string2::operator=(const char *s) {
delete [] str;
len = std::strlen(s);
str = new char[len + 1];
std::strcpy(str, s);
return *this;
}
char &string2::operator[](int i) {
return str[i];
}
const char &string2::operator[](int i) const {
return str[i];
}
int string2::howmany() {
return num_strings;
}
bool operator(const string2 & s1, const string2 & s2) {
return s2 < s1;
}
bool operator==(const string2 & s1, const string2 & s2) {
return (std::strcmp(s1.str, s2.str) == 0);
}
ostream & operator<>(istream & is, string2 & s) {
char temp[string2::CINLIM];
is.get(temp, string2::CINLIM);
if (is)
s = temp;
while (is && is.get() != '\n')
continue;
return is;
}
int string2::charnum(char ch) const {
int i = 0, num = 0;
while (str[i] != '\0') {
if (str[i] == ch)
++ num;
++ i;
}
return num;
}
string2 &string2::stringlow() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::toupper(str[i]);
++ i;
}
return *this;
}
string2 &string2::stringup() {
int i = 0;
while (str[i] != '\0') {
if (std::isalpha(str[i]))
str[i] = std::tolower(str[i]);
++ i;
}
return *this;
}
string2 & operator+(string2 & s1, const string2 & s2) {
char * temp = new char[s1.len];
std::strcpy(temp, s1.str);
delete [] s1.str;
s1.str = new char[s1.len + s2.len + 1];
s1.len += s2.len;
std::strcpy(s1.str, temp);
std::strcat(s1.str, s2.str);
return s1;
}
// run
void ch12_2() {
using namespace std;
string2 s1(" and I am a C++ student.");
string2 s3;
cout << s2;
cin >> s3;
string2 t("My name is ");
s2 = t + s3;
cout << s2 << ".\n";
s2 = s2 + s1;
s2.stringup();
cout << "The string\n" << s2 << "\ncontains " << s2.charnum('A')
<< " 'A' characters in it.\n";
s1 = "red";
string2 rgb[3] = {string2(s1), string2("green"), string2("blue")};
cout << "Enter the name of a primary color for mixing light: ";
string2 ans;
bool success = false;
while (cin >> ans) {
ans.stringlow();
for (int i = 0; i < 3; ++ i) {
if (ans == rgb[i]) {
cout << "That's right!\n";
success = true;
break;
}
}
if (success)
break;
else
cout << "Try again!\n";
}
cout << "Bye\n";
}') {
if (std::isalpha(str[i]))
str[i] = std::tolower(str[i]);
++ i;
}
return *this;
}

string2 & operator+(string2 & s1, const string2 & s2) {
char * temp = new char[s1.len];
std::strcpy(temp, s1.str);
delete [] s1.str;
s1.str = new char[s1.len + s2.len + 1];
s1.len += s2.len;
std::strcpy(s1.str, temp);
std::strcat(s1.str, s2.str);
return s1;
}

// run

void ch12_2() {
using namespace std;
string2 s1(" and I am a C++ student.");
string2 s3;
cout << s2;
cin >> s3;
string2 t("My name is ");
s2 = t + s3;
cout << s2 << ".\n";
s2 = s2 + s1;
s2.stringup();
cout << "The string\n" << s2 << "\ncontains " << s2.charnum('A')
<< " 'A' characters in it.\n";
s1 = "red";
string2 rgb[3] = {string2(s1), string2("green"), string2("blue")};
cout << "Enter the name of a primary color for mixing light: ";
string2 ans;
bool success = false;
while (cin >> ans) {
ans.stringlow();
for (int i = 0; i < 3; ++ i) {
if (ans == rgb[i]) {
cout << "That's right!\n";
success = true;
break;
}
}
if (success)
break;
else
cout << "Try again!\n";
}
cout << "Bye\n";
}``````
``````1 // chapter12_3_stock.h
2
3
4 void ch12_2() {
5     using namespace std;
6     string2 s1(" and I am a C++ student.");
8     string2 s3;
9     cout << s2;
10     cin >> s3;
11     string2 t("My name is ");
12     s2 = t + s3;
13     cout << s2 << ".\n";
14     s2 = s2 + s1;
15     s2.stringup();
16     cout << "The string\n" << s2 << "\ncontains " << s2.charnum('A')
17         << " 'A' characters in it.\n";
18     s1 = "red";
19     string2 rgb[3] = {string2(s1), string2("green"), string2("blue")};
20     cout << "Enter the name of a primary color for mixing light: ";
21     string2 ans;
22     bool success = false;
23     while (cin >> ans) {
24         ans.stringlow();
25         for (int i = 0; i < 3; ++ i) {
26             if (ans == rgb[i]) {
27                 cout << "That's right!\n";
28                 success = true;
29                 break;
30             }
31         }
32         if (success)
33             break;
34         else
35             cout << "Try again!\n";
36     }
37     cout << "Bye\n";
38 }
39
40
41 // chapter12_3_stock.cpp
42
43 #include "chapter12_3_stock.h"
44
45 #include
46 #include
47
48 stock::stock() {
49     company = new char[8];
50     len = 7;
51     strcpy(company, "no name");
52     shares = 0;
53     share_val = 0.0;
54     total_val = 0.0;
55 }
56
57 stock::stock(const char * co, long n, double pr) {
58     len = strlen(co);
59     company = new char[len + 1];
60     strcpy(company, co);
61     if (n < 0) {
62         std::cout << "Number of shares can't be negative; "
63             << company << " shares set to 0.\n";
64         shares = 0;
65     }
66     else
67         shares = n;
68     share_val = pr;
69     set_tot();
70 }
71
72 stock::~stock() {
73     delete [] company;
74 }
75
76 void stock::buy(long num, double price) {
77     if (num < 0) {
78         std::cout << "Number of shares purchased can't be nagetive. "
79             << "Transaction is aborted.\n";
80     }
81     else {
82         shares += num;
83         share_val = price;
84         set_tot();
85     }
86 }
87
88 void stock::sell(long num, double price) {
89     using std::cout;
90     if (num < 0) {
91         cout << "Number of shares sold can't be negative. "
92             << "Transaction is aborted.\n";
93     }
94     else {
95         shares -= num;
96         share_val = price;
97         set_tot();
98     }
99 }
100
101 void stock::update(double price) {
102     share_val = price;
103     set_tot();
104 }
105
106 void stock::show() const {
107     using std::cout;
108     using std::ios_base;
109     ios_base::fmtflags orig = cout.setf(ios_base::fixed, ios_base::floatfield);
110     std::streamsize  prec = cout.precision(3);
111     cout << "Company: " << company
112         << "  Shares: " << shares << '\n';
113     cout << "Shares Prices: \$" << share_val << '\n';
114     cout.precision(2);
115     cout << "Total Worth: \$" << total_val << '\n';
116     cout.setf(orig, ios_base::floatfield);
117     cout.precision(prec);
118 }
119
120 const stock &stock::topval(const stock &s) const {
121     if (s.total_val > total_val)
122         return s;
123     return *this;
124 }
125
126 std::ostream &operator< topval(ss[st]);
155     cout << "\nMost valuable holding:\n";
156     cout << *top;
157 }``````
``````1 // chapter12_4_stack.h
2
3
4 #ifndef LEARN_CPP_CHAPTER12_4_STACK_H
5 #define LEARN_CPP_CHAPTER12_4_STACK_H
6
7 typedef unsigned long Item;
8
9 class Stack {
10 private:
11     enum {MAX = 10};
12     Item * pitems;
13     int size;
14     int top;
15 public:
16     Stack(int n = MAX);
17     Stack(const Stack & st);
18     ~Stack();
19     bool isempty() const;
20     bool isfull() const;
21     bool push(const Item & item);
22     bool pop(Item & item);
23     void show() const;
24     Stack & operator=(const Stack & st);
25 };
26
27
28
29
30 #endif //LEARN_CPP_CHAPTER12_4_STACK_H
31
32 // chapter12_4_stack.cpp
33
34 #include "chapter12_4_stack.h"
35 #include
36
37 Stack::Stack(int n) {
38     pitems = new Item[n];
39     size = n;
40     top = 0;
41 }
42
43 Stack::Stack(const Stack &st) {
44     pitems = new Item[st.size];
45     size = st.size;
46     top = st.top;
47     for (int i = 0; i < st.top; ++ i)
48         pitems[i] = st.pitems[i];
49 }
50
51 Stack::~Stack() {
52     delete [] pitems;
53 }
54
55 bool Stack::isempty() const {
56     if (top == 0)
57         return true;
58     return false;
59 }
60
61 bool Stack::isfull() const {
62     if (top == size)
63         return true;
64     return false;
65 }
66
67 bool Stack::push(const Item &item) {
68     if (isfull())
69         return false;
70     pitems[top ++] = item;
71     return true;
72 }
73
74 bool Stack::pop(Item &item) {
75     if (isempty())
76         return false;
77     item = pitems[-- top];
78     return true;
79 }
80
81 Stack &Stack::operator=(const Stack &st) {
82     if (this == &st)
83         return *this;
84     if (pitems)
85         delete [] pitems;
86     pitems = new Item[st.size];
87     size = st.size;
88     top = st.top;
89     for (int i = 0; i < st.top; ++ i)
90         pitems[i] = st.pitems[i];
91     return *this;
92 }
93
94 void Stack::show() const {
95     using namespace std;
96     cout << "Stack: ";
97     for (int i = 0; i < top; ++ i)
98         cout << pitems[i] << " ";
99     cout << endl;
100 }
101
102 // run
103
104 void ch12_4() {
105     Stack s1(15);
106     s1.show();
107     s1.push(1234);s1.push(123);s1.push(12);
108     s1.show();
109     Item t = 0;
110     s1.pop(t);
111     s1.show();
112
113     Stack s2(s1);
114     s2.show();
115     s2.push(12345);
116     s2.show();
117
118     Stack s3 = s1;
119     s3.show();
120     s3.pop(t);
121     s3.show();
122 }``````
``````// ch12_5&6

//To be updated``````

Welcome to communicate with us.

Digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital Digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital digital Word digit digit digit digit digit digit digit number

## Do you know the usage of Django pager

catalogue 1. Prepare basic data 2. One time display data 3. Introducing a pager DjangoIs a large and comprehensive framework. It should be made clear that the paging data obtained by transferring parameters is generally sent to the servergetIt is implemented in the form of request. When sending the view data to the back-end service, […]