Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 12-2 String2.h
- #ifndef STRING2_H_
- #define STRING2_H_
- #include <iostream>
- class String
- {
- private:
- char * str;
- int len;
- static const int CINLIM = 80;
- public:
- String();
- String(const char * s);
- String(const String & st);
- String & operator=(const String & s);
- String & operator=(const char * s);
- ~String();
- int length() const { return len; }
- char & operator[](int i) { return str[i]; }
- const char & operator[](int i) const { return str[i]; }
- friend bool operator<(const String &st1, const String &st2); // mniejszy od
- friend bool operator>(const String &st1, const String &st2); // wiekszy od
- friend bool operator==(const String &st1, const String &st2); // porowannie 2 stringow
- friend std::ostream & operator<<(std::ostream & os, const String & st); // wypisuje na wyjsciu stringa
- friend std::istream & operator >> (std::istream & is, String & st); // przyjmuje na wejsciu stringa
- friend String & operator+(const String & st1, const String & st2); // dodaje 2 stringi
- void stringLow(); // zmienia duze litery na male
- void stringUp(); // zmienia male litery na duze
- int howMany(char ch) const; // zwraca liczbe wystapien ch w stringu
- };
- #endif
- // 12-2 String2.cpp
- #include "String2.h"
- #include <cstring>
- #include <cctype>
- String::String()
- {
- str = new char[1];
- str[0] = '\0';
- len = 0;
- }
- String::String(const char * s)
- {
- len = strlen(s);
- str = new char[len + 1];
- strcpy_s(str, len + 1, s);
- }
- String::String(const String & st)
- {
- len = st.len;
- str = new char[len + 1];
- strcpy_s(str, len + 1, st.str);
- }
- String & String::operator=(const String & st)
- {
- if (this == &st)
- return *this;
- delete[] str;
- len = st.len;
- str = new char[len + 1];
- strcpy_s(str, len + 1, st.str);
- return *this;
- }
- String & String::operator=(const char * s)
- {
- delete[] str;
- len = strlen(s);
- str = new char[len + 1];
- strcpy_s(str, len + 1, s);
- return *this;
- }
- String::~String()
- {
- delete[] str;
- }
- bool operator<(const String &st1, const String &st2)
- {
- return (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 (strcmp(st1.str, st2.str) == 0);
- }
- std::ostream & operator<<(std::ostream & os, const String & st)
- {
- os << st.str;
- return os;
- }
- std::istream & operator >> (std::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;
- }
- void String::stringLow()
- {
- for (int i = 0; str[i] == '\0'; i++)
- {
- if (isupper(str[i]))
- tolower(str[i]);
- }
- }
- void String::stringUp()
- {
- for (int i = 0; str[i] == '\0'; i++)
- {
- if (islower(str[i]))
- toupper(str[i]);
- }
- }
- int String::howMany(char ch) const
- {
- int count = 0;
- for (int i = 0; str[i] == '\0'; i++)
- {
- if (str[i] == ch)
- count++;
- }
- return count;
- }
- String & operator+(const String & st1, const String & st2)
- {
- String temp;
- temp.len = strlen(st1.str) + strlen(st2.str) + 1;
- delete[] temp.str;
- temp.str = new char[temp.len];
- strcpy_s(temp.str, temp.len, st1.str);
- for (int i = strlen(st1.str); st2.str[i] != '\0'; i++)
- temp.str[i] = st2.str[i];
- return temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment