cpp12.4

来源:互联网 发布:docker搭建java web 编辑:程序博客网 时间:2024/06/05 19:24

string1.h

#pragma once#include<iostream>using std::ostream;using std::istream;class String{private:char*str;int len;static int num_strings;static const int CINLIM = 80;public:String(const char*s);String();String(const String &);~String();int length() const { return len; }String & operator=(const String &);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 &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 int HowMany();};

string1.cpp


#define _CRT_SECURE_NO_WARNINGS#include<cstring>#include"string1.h"using std::cin;using std::cout;int String::num_strings = 0;int String::HowMany(){return num_strings;}String::String(const char*s){len = std::strlen(s);str = new char[len + 1];std::strcpy(str, s);num_strings++;}String::String(){len = 4;str = new char[1];str[0] = '\0';num_strings++;}String::String(const String & st){num_strings++;len = st.len;str = new char[len + 1];std::strcpy(str, st.str);}String::~String(){--num_strings;delete[] str;}String&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;}String & String::operator=(const char*s){delete[] str;len = std::strlen(s);str = new char[len + 1];std::strcpy(str, s);return*this;}char & String::operator[](int i){return str[i];}const char & String::operator[](int i)const{return str[i];}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);}ostream & operator<<(ostream & os, const String & st){os << st.str;return os;}istream & 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;}


sayings1.cpp

#include<iostream>#include"string1.h"const int ArSize = 10;const int MaxLen = 81;int main(){using std::cout;using std::cin;using std::endl;String name;cout << "Hi, what's your name?\n>> ";cin >> name;cout << name << ", please enter up to " << ArSize<< "short sayings <empty line to quit>:\n";String sayings[ArSize];char temp[MaxLen];int i;for (i = 0; i < ArSize; i++){cout << i + 1 << ": ";cin.get(temp, MaxLen);while (cin && cin.get() != '\n')continue;if (!cin || temp[0] == '\0')break;elsesayings[i] = temp;}int total = i;if (total > 0){cout << "Here are your sayings:\n";for (i = 0; i < total; i++)cout << sayings[i][0] << ": " << sayings[i] << endl;int shortest = 0;int first = 0;for (i = 1; i < total; i++){if (sayings[i].length() < sayings[shortest].length())shortest = i;if (sayings[i] < sayings[first])first = i;}cout << "Shortest saying:\n" << sayings[shortest] << endl;cout << "First alphabetically:\n" << sayings[first] << endl;cout << "This program used " << String::HowMany()<< " String objects.Bye.\n";}elsecout << "No input! Bye.\n";system("pause");return 0;}


0 0