Advertisement
AmirVagapov

Class String + BMSearch (upd)

Nov 8th, 2022 (edited)
620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <string.h>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. class String{
  8.     char *str;
  9.     int len;
  10.     public:
  11.         String(int l = 0) {
  12.             str = new char[l+1];
  13.             len = 0;
  14.             strcpy(str,"\0");
  15.         };
  16.         String(const char * a) {
  17.             str = new char[strlen(a)+1];
  18.             strcpy(str,a);
  19.             len = strlen(a);
  20.         };
  21.         String(String & a) {
  22.             str = new char[a.len+1];
  23.             len = a.len;
  24.             strcpy(str,a.str);
  25.         };
  26.         ~String() { if(str) delete []str; str = NULL; }
  27.         int Len();
  28.         String & operator = (const String &);
  29.         char &operator [](int);
  30.         bool operator == (const String &);
  31.         bool operator != (const String &);
  32.         String operator + (const String &);
  33.         String & operator += (const String &);
  34.         friend istream & operator >> (istream & in, String & a);
  35.         friend ostream & operator << (ostream & out, String & a);
  36.         int BMSearch(String &);
  37. };
  38.  
  39. int String::Len() {
  40.     return len;
  41. }
  42. String & String::operator = (const String &a) {
  43.     if (this!=&a) {
  44.         delete [] str;
  45.         str = new char[a.len+1];
  46.         strcpy(str,a.str);
  47.         len = a.len;
  48.     }
  49.     return *this;
  50. }
  51. char & String::operator [](int a) {
  52.     if (a<0 || a>=len) exit(1);
  53.     return str[a];
  54. }
  55. bool String::operator == (const String &a) {
  56.     if(strcmp(str,a.str)) return false;
  57.     return true;
  58. }
  59. bool String::operator != (const String &a) {
  60.     if(strcmp(str,a.str)) return true;
  61.     return false;
  62. }
  63. String String::operator + (const String &a) {
  64.     String z(len+a.len+1);
  65.     z.len = len + a.len;
  66.     strcpy(z.str,str);
  67.     strcat(z.str,a.str);
  68.     return z;
  69. }
  70. String & String::operator += (const String &a) {
  71.     char  *t = new  char[len + 1];
  72.     strcpy(t, str);
  73.     delete  [] str;
  74.     len = len + a.len;
  75.     str = new char[len + 1];
  76.     strcpy( str, t);
  77.     strcat( str, a.str);
  78.     delete  [] t;
  79.     return *this;
  80. }
  81. istream & operator >> (istream & in, String & a) {
  82.     in>>a.str;
  83.     a.len = strlen(a.str);
  84.     return in;
  85. }
  86. ostream & operator << (ostream & out, String & a) {
  87.     cout<<a.str;
  88.     return out;
  89. }
  90. int String::BMSearch(String & a) {
  91.     int m = a.len;
  92.     int n = len;
  93.     int t[256];
  94.     fill_n(t,256,m);
  95.     for (int i = 0; i < m-1;i++) {
  96.         t[a.str[i]] = m-1-i;
  97.     }
  98.     int i = m-1,j = m-1;
  99.     while ( i < n && j>=0) {
  100.         int k = i;
  101.         j = m-1;
  102.         while (j>=0) {
  103.             if(str[k]!=a.str[j]) {
  104.                 i += t[str[i]];
  105.                 j = m - 1;
  106.                 break;
  107.             }
  108.             j--;
  109.             k--;
  110.         }
  111.     }
  112.     if(j>=0) return -1;
  113.     else return i+1-m;
  114. }
  115.  
  116. int main()
  117. {
  118.     String a, b("qwertyuiop");
  119.     String c("qwerty");
  120.    
  121.     cout<<"operator[] = "<<b[3]<<endl<<endl;
  122.    
  123.     cout<<"b = "<<b<<endl<<"c = "<<c<<endl;
  124.    
  125.     a = b + c;
  126.     cout<<"a = b + c : "<<a<<endl;
  127.    
  128.     a+=c;
  129.     cout<<"a+= : "<<a<<endl<<endl;
  130.    
  131.     b = "qwerty";
  132.     cout<<"c = "<<c<<endl<<"b = "<<b<<endl;
  133.     if(c==b) cout<<"c equal b\n\n";
  134.    
  135.     b = a;
  136.     cout<<"c = "<<c<<endl<<"b = "<<b<<endl;
  137.     if(c!=b) cout<<"c not equal b\n\n";
  138.    
  139.    
  140.     a = "abcabccbaaaghabcabcde";
  141.     b = "ghab";
  142.    
  143.     cout<<"Match at "<<a.BMSearch(b)<<" position\n\n"<<"a = "<<a<<endl<<"b = "<<b<<endl<<endl;
  144.    
  145.     cout<<"operator[] = "<<b[0]<<endl<<endl;
  146.    
  147.     String h(100);
  148.     cout<<"Enter NewString: ";
  149.     cin>>h;
  150.     cout<<"NewString: "<<h<<"\n"<<"NewStrLen: "<<h.Len();
  151.  
  152.     return 0;
  153. }
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement