Advertisement
Guest User

Untitled

a guest
Feb 15th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.38 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. //Helper Functions
  6. namespace str {
  7.     int strlen(const char* someStr) {
  8.  
  9.         if (someStr == nullptr) {
  10.             return 0;
  11.         }
  12.         int count = 0;
  13.         while (someStr[count]) {
  14.             ++count;
  15.         }
  16.         return count;
  17.     }
  18.  
  19.     char *strcpy(char *dest, const char *plc) {
  20.         int i;
  21.         for (i = 0; plc[i] != '\0'; ++i) {
  22.             dest[i] = plc[i];
  23.         }
  24.         dest[i] = '\0';
  25.         return dest;
  26.     }
  27.  
  28.     char *strcat(const char *s1, const char *s2) {
  29.         char *newStr = new char[strlen(s1) + strlen(s2)+1];
  30.         unsigned int s1L = strlen(s1);
  31.         unsigned int s2L = strlen(s2);
  32.         strcpy(newStr, s1);
  33.         strcpy(newStr + strlen(s1), s2);
  34.         return newStr;
  35.         delete [] newStr;
  36.     }
  37.  
  38.     char *strrev(char *dest, char *src) {
  39.         int i;
  40.         char temp;
  41.         int len = strlen(src) / 2;
  42.         for (i = 0; i < len; ++i) {
  43.             temp = dest[i];
  44.             dest[i] = dest[len - i - 1];
  45.             dest[len - i - 1] = temp;
  46.         }
  47.         return dest;
  48.     }
  49.  
  50.     int strcmp(const char *string1, const char *string2) {
  51.         int result = 0;
  52.         bool Equal = false;
  53.  
  54.         while (*string1 != '\0' && *string2 != '\0' && !Equal) {
  55.             if (*string1 != *string2) {
  56.                 result = 0;
  57.                 Equal = false;
  58.             }
  59.             string1++;
  60.             string2++;
  61.         }
  62.         if (*string1 == '\0' && *string2 == '\0' && Equal) {
  63.             result = 0;
  64.         }
  65.         if (*string1 < *string2) {
  66.             result = -1;
  67.         }
  68.         if (*string1 > *string2) {
  69.             result = 1;
  70.         }
  71.         return result;
  72.     }
  73.  
  74.     // char *strstr(char *pos, char *ptr) {
  75.     //  char *start = pos;
  76.     //  char *pat = ptr;
  77.     //  while (*pos && *pat && *pos == pat) {
  78.     //      pos++;
  79.     //      pat++;
  80.     //  }
  81.     //  if (!pat) {
  82.     //      return start;
  83.     //      pos = start + 1;
  84.     //  }
  85.     //  return nullptr;
  86.     // }
  87.  
  88.     char *strdup(const char *s1) {
  89.         char *dup = new char[strlen(s1) + 1];
  90.         if (!dup) {
  91.             return nullptr;
  92.         }
  93.         return strcpy(dup, s1);
  94.     }
  95.  
  96.     char *str2dup(const char *s1, const char *s2) {
  97.         char *someStr = nullptr;
  98.         someStr = strcat(s1,s2);
  99.         return someStr;
  100.     }
  101.  
  102.  
  103.     class my_str {
  104.     public:
  105.         //O(n) = O(1)
  106.         my_str(const char *s = " ") {
  107.             dynArr = strdup(s);
  108.         }
  109.         //O(n) = O(1)
  110.         my_str(const my_str &s) {
  111.             dynArr = strdup(s.dynArr);
  112.         }
  113.         //O(n) = O(n)
  114.         my_str &operator=(const my_str &s) {
  115.             delete[] dynArr;
  116.             dynArr = strdup(s.dynArr);
  117.             return *this;
  118.         }
  119.         //O(n) = O(n)
  120.         char &operator[](const int index) {
  121.             if (index > length())
  122.             {
  123.                 std::cout << "you are out of bounds!!";
  124.                 return dynArr[length()];
  125.             }
  126.             return dynArr[index];
  127.         }
  128.  
  129.         //O(1)
  130.         int length()const {
  131.             return strlen(dynArr);
  132.         }
  133.         //O(n) = O(2n)
  134.         int indexOf(char c)const {
  135.             int index = 0;
  136.             int len = length();
  137.             while (index < len) {
  138.                 if (dynArr[index] == c)
  139.                 {
  140.                     return index;
  141.                 }
  142.                 index++;
  143.             }
  144.             return -1;
  145.         }
  146.  
  147.         //O(n) =
  148.         int indexOf(const my_str &pat)const {
  149.  
  150.         }
  151.  
  152.         //O(1)
  153.         bool operator ==(const my_str &s)const {
  154.             return strcmp(dynArr, s.dynArr) == 0;
  155.         }
  156.  
  157.         //O(n) =
  158.         my_str operator+(const my_str &s)const {
  159.             return my_str(static_cast<const char*>(str2dup(this->dynArr,s.dynArr)));
  160.         }
  161.  
  162.         //O(n) =
  163.         my_str &operator +=(const my_str &s) {
  164.             char *var = new char[strlen(s.dynArr) + strlen(this->dynArr) + 1];
  165.             var = str2dup(this->dynArr, s.dynArr);
  166.             dynArr = var;
  167.             return *this;
  168.             delete []var;
  169.         }
  170.  
  171.         //O(n) =
  172.         // my_str reverse()const{
  173.         //     char *str = nullptr;
  174.         //  char *temp = new char[strlen(temp)];
  175.         //  temp = strrev(temp,str);
  176.         //  return *this;
  177.         // }
  178.  
  179.         //O(1)
  180.         void print(std::ostream &out)const {
  181.             out << dynArr;
  182.         }
  183.  
  184.         //O(n) =
  185.         void read(std::istream &in) {
  186.             std::cout << "please eneter in text: ";
  187.             in.getline(this->dynArr, 10);
  188.         }
  189.  
  190.         //O(1)
  191.         ~my_str() {
  192.             delete[]dynArr;
  193.         }
  194.  
  195.     private:
  196.         char *dynArr = nullptr;
  197.     };
  198.  
  199.     inline std::ostream &operator <<(std::ostream &out, my_str &str) {
  200.         str.print(out);
  201.         return out;
  202.     }
  203.  
  204.     inline std::istream &operator >>(std::istream &in, my_str &str) {
  205.         //str.read(in);
  206.         return in;
  207.     }
  208.     /**********************************************************/
  209.     //Testing Functions
  210. //  my_str copyConstructorTest(const my_str &l) {
  211. //
  212. //      return l;
  213. //  }
  214.  
  215.     void testAssignment() {
  216.         my_str a = "joji";
  217.         my_str b;
  218.         std::cout << "Before Assignment: " << a << std::endl;
  219.         std::cout << "After Assignment: " << (b = a) << std::endl;
  220.     }
  221.  
  222. //  void testReverse() {
  223. //      std::ifstream ifs;
  224. //      ifs.open("input.txt");
  225. //      my_str l;
  226. //
  227. //       while (ifs >> l) {
  228. //          std::cout << copyConstructorTest(l) << " " << l.length() << " " << l.reverse() <<
  229. //          ifs.close();
  230. //       }
  231. //  }
  232.  
  233.     void testPrint() {
  234.         my_str a = "hello";
  235.         a.print(std::cout);
  236.     }
  237.  
  238.     void testIndexOf() {
  239.         my_str a = "jojithomas";
  240.         std::cout << a.indexOf('a') << std::endl;
  241.     }
  242.  
  243.     void testLength() {
  244.         my_str j = "cs1d";
  245.         std::cout << j.length() << std::endl;
  246.     }
  247.  
  248.     //double the size for the array then copy over then delete old array
  249.     // void testRead() {
  250.     //  my_str ar;
  251.     //  ar.read(std::istream);
  252.     // }
  253.  
  254.     void testAddEqual() {
  255.         my_str a = "driver";
  256.         my_str b = "racecar";
  257.         std::cout << (b += a);
  258.     }
  259.  
  260.     void testStrAdd() {
  261.         my_str a = "abc";
  262.         my_str b = "def";
  263.         (a + b).print(std::cout);
  264.     }
  265.  
  266.     void testEqual() {
  267.         my_str a = "joji";
  268.         my_str b = "joe";
  269.         my_str c = "joji";
  270.         std::cout << "A is = to B: ";
  271.         std::cout << (a == b);
  272.         std::cout << "\nA is = to C: ";
  273.         std::cout << (a == c);
  274.  
  275.     }
  276.  
  277. //  void testSubStr(){
  278. //
  279. //  }
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement