Leedwon

Untitled

Apr 27th, 2017
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.24 KB | None | 0 0
  1. // 12-2 String2.h
  2.  
  3. #ifndef STRING2_H_
  4. #define STRING2_H_
  5. #include <iostream>
  6.  
  7. class String
  8. {
  9. private:
  10.     char * str;
  11.     int len;
  12.     static const int CINLIM = 80;
  13. public:
  14.     String();
  15.     String(const char * s);
  16.     String(const String & st);
  17.     String & operator=(const String & s);
  18.     String & operator=(const char * s);
  19.     ~String();
  20.     int length() const { return len; }
  21.     char & operator[](int i) { return str[i]; }
  22.     const char & operator[](int i) const { return str[i]; }
  23.     friend bool operator<(const String &st1, const String &st2); // mniejszy od
  24.     friend bool operator>(const String &st1, const String &st2); // wiekszy od
  25.     friend bool operator==(const String &st1, const String &st2); // porowannie 2 stringow
  26.     friend std::ostream & operator<<(std::ostream & os, const String & st); // wypisuje na wyjsciu stringa
  27.     friend std::istream & operator >> (std::istream & is, String & st); // przyjmuje na wejsciu stringa
  28.     friend String & operator+(const String & st1, const String & st2); // dodaje 2 stringi
  29.     void stringLow(); // zmienia duze litery na male
  30.     void stringUp(); // zmienia male litery na duze
  31.     int howMany(char ch) const; // zwraca liczbe wystapien ch w stringu
  32. };
  33.  
  34.  
  35.  
  36. #endif
  37.  
  38. // 12-2 String2.cpp
  39.  
  40. #include "String2.h"
  41. #include <cstring>
  42. #include <cctype>
  43.  
  44. String::String()
  45. {
  46.     str = new char[1];
  47.     str[0] = '\0';
  48.     len = 0;
  49. }
  50. String::String(const char * s)
  51. {
  52.     len = strlen(s);
  53.     str = new char[len + 1];
  54.     strcpy_s(str, len + 1, s);
  55. }
  56. String::String(const String & st)
  57. {
  58.     len = st.len;
  59.     str = new char[len + 1];
  60.     strcpy_s(str, len + 1, st.str);
  61. }
  62. String & String::operator=(const String & st)
  63. {
  64.     if (this == &st)
  65.         return *this;
  66.     delete[] str;
  67.     len = st.len;
  68.     str = new char[len + 1];
  69.     strcpy_s(str, len + 1, st.str);
  70.     return *this;
  71. }
  72. String & String::operator=(const char * s)
  73. {
  74.     delete[] str;
  75.     len = strlen(s);
  76.     str = new char[len + 1];
  77.     strcpy_s(str, len + 1, s);
  78.     return *this;
  79. }
  80. String::~String()
  81. {
  82.     delete[] str;
  83. }
  84. bool operator<(const String &st1, const String &st2)
  85. {
  86.     return (strcmp(st1.str, st2.str) < 0);
  87. }
  88. bool operator>(const String &st1, const String &st2)
  89. {
  90.     return st2 < st1;
  91. }
  92. bool operator==(const String &st1, const String &st2)
  93. {
  94.     return (strcmp(st1.str, st2.str) == 0);
  95. }
  96. std::ostream & operator<<(std::ostream & os, const String & st)
  97. {
  98.     os << st.str;
  99.     return os;
  100. }
  101. std::istream & operator >> (std::istream & is, String & st)
  102. {
  103.     char temp[String::CINLIM];
  104.     is.get(temp, String::CINLIM);
  105.     if (is)
  106.         st = temp;
  107.     while (is && is.get() != '\n')
  108.         continue;
  109.     return is;
  110. }
  111. void String::stringLow()
  112. {
  113.     for (int i = 0; str[i] == '\0'; i++)
  114.     {
  115.         if (isupper(str[i]))
  116.             tolower(str[i]);
  117.     }
  118. }
  119. void String::stringUp()
  120. {
  121.     for (int i = 0; str[i] == '\0'; i++)
  122.     {
  123.         if (islower(str[i]))
  124.             toupper(str[i]);
  125.     }
  126. }
  127. int String::howMany(char ch) const
  128. {
  129.     int count = 0;
  130.     for (int i = 0; str[i] == '\0'; i++)
  131.     {
  132.         if (str[i] == ch)
  133.             count++;
  134.     }
  135.     return count;
  136. }
  137. String & operator+(const String & st1, const String & st2)
  138. {
  139.     String temp;
  140.     temp.len = strlen(st1.str) + strlen(st2.str) + 1;
  141.     delete[] temp.str;
  142.     temp.str = new char[temp.len];
  143.     strcpy_s(temp.str, temp.len, st1.str);
  144.     for (int i = strlen(st1.str); st2.str[i] != '\0'; i++)
  145.         temp.str[i] = st2.str[i];
  146.     return temp;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment