【12.2】c++ primer plus 课后编程答案

来源:互联网 发布:矩阵归一化处理公式 编辑:程序博客网 时间:2024/06/05 13:35
C++ PRIMER PLUS 课后答案 使用IDE为window7系统下的VS2010
/*user.h*/#ifndef USERSH_H_#define USERSH_H_#include <string>using std::ostream;using std::istream;class stringg{private:char * str;int len;static int num_string;static const int CINLIM=80;public:stringg(const char * s);stringg();stringg(const stringg &);~stringg();int length()const{return len;}void stringglow();void stringgup();int has(const char s);stringg & operator = (const stringg &);stringg & operator = (const char *);stringg operator + (const char *);char & operator [](int i);const char & operator [] (int i)const;friend bool operator < (const stringg & st,const stringg & st1);friend bool operator > (const stringg & st1,const stringg & st2);friend bool operator == (const stringg & st,const stringg & st2);friend stringg  operator + (const stringg &,const stringg &);friend ostream & operator << (ostream & os,const stringg & st);friend istream & operator >> (istream & is,stringg & st);static int howmany();};#endif
/*userfucntion.cpp*/#include "usersh.h"#include <iostream>#include <cstring>#include <cctype>using std::cout;using std::cin;using std::ostream;using std::istream;int stringg::num_string=0;int stringg::howmany(){return num_string;}void stringg::stringglow(){int i=0;for (;i<len;i++){str[i]=tolower(str[i]);}}void stringg::stringgup(){int i=0;for (;i<len;i++){str[i]=toupper(str[i]);}}int stringg::has(const char s){int i=0;int num=0;for (;i<len;i++){if(str[i]==s)num++;}return num;}stringg::stringg(const char * s){len=std::strlen(s);str=new char [len+1];strcpy(str,s);num_string++;}stringg::stringg(){len=4;str=new char[1];str[0]='\0';num_string++;}stringg::stringg(const stringg & st){num_string++;len=st.len;str=new char [len+1];strcpy(str,st.str);}stringg::~stringg(){--num_string;delete [] str;}stringg & stringg::operator =(const stringg & st){if (this==&st)return *this;delete []str;len=st.len;str=new char [len+1];strcpy(str,st.str);return * this;}stringg & stringg::operator =(const char * s){delete []str;len=std::strlen(s);str=new char [len+1];strcpy(str,s);return * this;}stringg stringg::operator +(const char * s){stringg temp;delete []temp.str;temp.len=len+strlen(s);temp.str=new char [temp.len+1];strcpy(temp.str,str);strcat(temp.str,s);return temp;}stringg operator + (const stringg & st1,const stringg & st2){stringg temp;delete []temp.str;temp.len=st1.len+st2.len;temp.str=new char[temp.len+1];strcpy(temp.str,st1.str);strcat(temp.str,st2.str);return temp;}char & stringg::operator [](int i){return str[i];}const char & stringg::operator [](int i)const{return str[i];}bool operator < (const stringg & st1,const stringg & st2){return (std::strcmp(st1.str,st2.str)<0);}bool operator > (const stringg & st1,const stringg & st2){return st2<st1;}bool operator == (const stringg & st1,const stringg & st2){return (std::strcmp(st1.str,st2.str)==0);}ostream & operator << (ostream & os,const stringg & st){os<<st.str;return os;}istream & operator >> (istream & is,stringg & st){char temp[stringg::CINLIM];is.get(temp,stringg::CINLIM);if(is)st=temp;while (is && is.get()!='\n')continue;return is;}

/*main*/#include <iostream>#include <Windows.h>#include "usersh.h"#include <cstdlib>#include <ctime>using std::cout;using std::cin;using std::endl;int main(){   stringg s1(" and i am a c++ student.");stringg s2 = "please enter your name: ";stringg s3;cout<<s2;cin>>s3;s2="my name is "+s3;cout<<s2<<'\n';s2=s2+s1;s2.stringgup();cout<<"the string\n"<<s2<<"\n contains "<<s2.has('A')<<" 'A' in it\n";s1="red";stringg rgb[3]={stringg(s1),stringg("green"),stringg("blue")};cout<<"enter the name of a primary color for mixing light:";stringg ans;bool success=false;while (cin>>ans){ans.stringglow();for (int i=0;i<3;i++){if (ans==rgb[i]){cout<<"that's right!\n";success = true;break;}}if(success)break;elsecout<<"try again!\n";}cout<<"bye!\n";system("pause");return 0;}