C++ Primer Plus第六版编程练习12.2解答
来源:互联网 发布:百度APP软件中心 编辑:程序博客网 时间:2024/06/05 19:20
string2.h
// string2.h -- fixed and augmented string class definition#ifndef STRING2_H_#define STRING2_H_#include <iostream>using std::ostream;using std::istream;class String{private: char * str; // pointer to string int len; // length of string static int num_strings; // number of objects static const int CINLIM = 80; // cin input limitpublic:// constructors and other methods String(const char * s); // constructor String(); // default constructor String(const String &); // copy constructor ~String(); // destructor int length () const {return len;}// overloaded operator methods String & operator=(const String &); String & operator=(const char *); char & operator[](int i); const char & operator[](int i) const; void stringlow(); void stringup(); int has(char ch);// overloaded operator friends friend String operator+(const String &st, const String &st2); friend bool operator<(const String &st, const String &st2); friend bool operator>(const String &st1, const String &st2); friend bool operator==(const String &st, const String &st2); friend ostream & operator<<(ostream & os, const String & st); friend istream & operator>>(istream & is, String & st);// static function static int HowMany();};#endif
string2.cpp
// string2.cpp -- String class methods#include <cstring> // string.h for some#include "string2.h" // includes <iostream>#include <cctype>using std::cin;using std::cout;// initializing static class memberint String::num_strings = 0;// static methodint String::HowMany(){ return num_strings;}// class methodsString::String(const char * s) // construct String from C string{ len = std::strlen(s); // set size str = new char[len + 1]; // allot storage std::strcpy(str, s); // initialize pointer num_strings++; // set object count}String::String() // default constructor{ len = 0; str = new char[1]; str[0] = '\0'; // default string num_strings++;}String::String(const String & st){ num_strings++; // handle static member update len = st.len; // same length str = new char [len + 1]; // allot space std::strcpy(str, st.str); // copy string to new location}String::~String() // necessary destructor{ --num_strings; // required delete [] str; // required}// overloaded operator methods// assign a String to a StringString & String::operator=(const String & st){ if (this == &st) return *this; delete [] str; len = st.len; str = new char[len + 1]; std::strcpy(str, st.str); return *this;}// assign a C string to a StringString & String::operator=(const char * s){ delete [] str; len = std::strlen(s); str = new char[len + 1]; std::strcpy(str, s); return *this;}// read-write char access for non-const Stringchar & String::operator[](int i){ return str[i];}// read-only char access for const Stringconst char & String::operator[](int i) const{ return str[i];}void String::stringlow(){ for(int i=0; i<len; i++) { if(isupper(str[i])) str[i]=tolower(str[i]); }}void String::stringup(){ for(int i=0; i<len; i++) { if(islower(str[i])) str[i]=toupper(str[i]); }}int String::has(char ch){ int counts=0; for(int i=0; i<len; i++) { if(str[i]==ch) counts++; } return counts;}// overloaded operator friendsString operator+(const String &st, const String &st2){ char * temp = new char [st.len+st2.len+1]; std::strcpy(temp, st.str); std::strcat(temp, st2.str); String add(temp); return add;}bool operator<(const String &st1, const String &st2){ return (std::strcmp(st1.str, st2.str) < 0);}bool operator>(const String &st1, const String &st2){ return st2 < st1;}bool operator==(const String &st1, const String &st2){ return (std::strcmp(st1.str, st2.str) == 0);}// simple String outputostream & operator<<(ostream & os, const String & st){ os << st.str; return os;}// quick and dirty String inputistream & operator>>(istream & is, String & st){ char temp[String::CINLIM]; is.get(temp, String::CINLIM); if (is) st = temp; while (is && is.get() != '\n') continue; return is;}
usestring2.cpp
#include "string2.h"#include <iostream>using namespace std;int main(){ String s1(" and I am a C++ student."); String s2="Please enter your name: "; String s3; cout<<s2; //overloaded << operator cin>>s3; //overloaded >> operator s2="My name is "+s3; //overloaded =, + operators cout<<s2<<".\n"; s2=s2+s1; s2.stringup(); //converts string to uppercase cout<<"The string\n"<<s2<<"\ncontians "<<s2.has('A') <<" 'A' characters in it.\n"; s1="red"; //String(const char *) //then String & operator=(const String &) String rgb[3]= {String(s1), String("green"), String("blue")}; cout<<"Enter the name of a primary color for mixing light: "; String ans; bool success=false; while(cin>>ans) { ans.stringlow(); //converts string to lowercase for(int i=0; i<3; i++) { if(ans==rgb[i]) //overloaded == operator { cout<<"That's right!\n"; success=true; break; } } if(success) break; else cout<<"Try again!\n"; } cout<<"Bye!\n"; cin.get(); return 0;}
0 0
- C++ Primer Plus第六版编程练习12.2解答
- C++ Primer Plus第六版编程练习6.7解答
- C++ Primer Plus第六版编程练习6.9解答
- C++ Primer Plus第六版编程练习7.10解答
- C++ Primer Plus第六版编程练习8.2解答
- C++ Primer Plus第六版编程练习8.6解答
- C++ Primer Plus第六版编程练习9.1解答
- C++ Primer Plus第六版编程练习9.4解答
- C++ Primer Plus第六版编程练习10.3解答
- C++ Primer Plus第六版编程练习10.4解答
- C++ Primer Plus第六版编程练习10.5解答
- C++ Primer Plus第六版编程练习10.6解答
- C++ Primer Plus第六版编程练习10.8解答
- C++ Primer Plus第六版编程练习11.1解答
- C++ Primer Plus第六版编程练习11.2解答
- C++ Primer Plus第六版编程练习11.3解答
- C++ Primer Plus第六版编程练习11.4解答
- C++ Primer Plus第六版编程练习11.5解答
- Leetcode第三题_Longest Substring Without Repeating Characters
- 【C语言】DigitSum(n) (递归函数)
- 小白也刷题-----leetcode去除数组中指定元素
- java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决
- 盘点有哪些国家自主研发自己的操作系统
- C++ Primer Plus第六版编程练习12.2解答
- Struts2中拦截器的配置
- 双链表的实现及其功能大全!!!
- Leetcode Reverse Nodes in k-Group
- C++与python交互
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
- activity启动的入门
- 身份证号码合法性判断
- C++ Primer Plus第六版编程练习12.3解答