中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++string類的相關操作

發布時間:2020-07-29 17:37:37 來源:網絡 閱讀:591 作者:小楊楊雪松 欄目:編程語言

 

     string的應用是非常典型的,下面我寫了一些簡單的string類的相關的一些操作,包括增刪查改等一些功能和一些運算符的重載,包括他們的測試用例:


#include<iostream>
#include<string>
#include<assert.h>
using namespace std;

#define CARA 3;
class String
{
public:
 String(char *str = "")
  :_str(new char[strlen(str) + 1])
  , _size(strlen(str))
  , _capacity(strlen(str)+1)
 {
  strcpy(_str, str);
 }

 String(const String& s)
  :_str(NULL)
 {
  String tmp(s._str);
  swap(_str,tmp._str);
 }

 char& operator[](int size)
 {
  return _str[size];
 }

 String& operator=(const String& s)
 {
  if (this != &s)
  {
   String tmp(s._str);
   swap(_str, tmp._str);
  }
  return *this;
 }

 void _CheckCapacity(size_t capacity)
 {
  if (capacity > _capacity)
  {
   _capacity = capacity + CARA;
   _str = (char*)realloc(_str, _capacity);
   assert(_str);
  }
 }


 void PushBack(char ch)
 {
  _CheckCapacity(_size+2);
  _str[_size++] = ch;
  _str[_size] = '\0';
  
  //或者:
  /*Insert(_size+1,ch);
  _size++;*/

 }

 void PopBack()
 {
  --_size;
  _str[_size] = '\0';
 }

 void PushFront(char ch)
 {
  _CheckCapacity(_size + 2);

  for (int begin = _size; begin >= 0; begin--)
  {
   _str[begin + 1] = _str[begin];
  }
  _str[0] = ch;
  _size++;
 }

 void PopFront()
 {
  for (int begin = 1; begin <= _size; begin++)
  {
   _str[begin - 1] = _str[begin];
  }
  _size--;
 }

 
 void Insert(size_t pos, char ch)
 {
  _CheckCapacity(_size + 2);

  for (int begin = _size; begin >= pos-1; begin--)
  {
   _str[begin + 1] = _str[begin];
  }
  _str[pos-1] = ch;
  _size++;
 }

 void Insert(size_t pos, char* str)
 {
  _CheckCapacity(_size + strlen(str)+1);

  //char *strncpy(char *strDest, const char *strSource, size_t count);  strncpy的用法
  int end = strlen(str) + _size;
  for (int begin = _size; begin >= pos; begin--)
  {
   _str[end] = _str[begin];
   end--;
  }
  strncpy(_str+pos, str, strlen(str));
  _size += strlen(str);
 }

 int Find(const String& s)
 {
  if (_size < s._size)
  {
   return -1;
  }
  int srcIndex = 0;
  int desIndex = 0;
  int tmp = 0;
  while (srcIndex<_size)
  {
   tmp = srcIndex;
   while (desIndex < s._size)
   {
    if (_str[srcIndex] == s._str[desIndex])
    {
     srcIndex++;
     desIndex++;
    }
    else
    {
     desIndex = 0;
     srcIndex = tmp + 1;
     break;
    }
   }

   if (desIndex == s._size)
   {
    return tmp;
   }
  }
  return -1;
 }

 bool operator<(const String& s)
 {
  char*begin1 = _str;
  char*begin2 = s._str;
  while (*begin1 && *begin2)
  {
   if (*begin1 < *begin2)
   {
    return true;
   }
   else if (*begin1 > *begin2)
   {
    return false;
   }
   else
   {
    begin1++;
    begin2++;
   }
  }
  return *begin1 < *begin2;
 }

 bool operator==(const String& s)
 {
  char*begin1 = _str;
  char*begin2 = s._str;
  if (_size != s._size)
  {
   return false;
  }

  while (*begin1 && *begin2)
  {
   if (*begin1 != *begin2)
   {
    return false;
   }
   else
   {
    begin1++;
    begin2++;
   }
  }
  return true;
 }

 bool operator>(  const String& s)
 {
  return !((*this < s) ||( *this == s));
 }

 char* Disply()
 {
  return _str;
 }

 ~String()
 {
  if (_str)
  {
   delete[]_str;
  }
 }

private:
 char *_str;
 int _size;
 int _capacity;
};

void Test1()
{
 String s1("abcde");
 String s2(s1);
 cout << s2.Disply() << endl;

 String s3;
 s3 = s1;
 cout << s3.Disply() << endl;
}

void Test2()    //測試PushBack
{
 String s1("abcde");
 s1.PushBack('z');
 cout << s1.Disply() << endl;
}

void Test3()    //測試Insert一個字符
{
 String s1("abcde");
 s1.Insert(4,'z');
 cout << s1.Disply() << endl;
}

void Test4()    //測試Insert一個字符串
{
 String s1("abcde");
 s1.Insert(5, "fgh");
 cout << s1.Disply() << endl;
}

void Test5()    //測試PopBack
{
 String s1("abcde");
 cout << s1.Disply() << endl;

 s1.PopBack();
 cout << s1.Disply() << endl;
}

void Test6()   //測試<
{
 String s1("ab");
 String s2("abc");
 cout << (s1 < s2) << endl;
}

void Test7()   //測試==
{
 String s1("ab");
 String s2("abc");
 cout << (s1 == s2) << endl;
}

void Test8()  //測試>
{
 String s1("a");
 String s2("abc");
 cout << (s1 > s2) << endl;
}

void Test9()
{
 String s1("abcdabcef");
 int ret = s1.Find("efg");
 cout << ret << endl;
}

void Test10()
{
 String s1("abcd");
 s1.PushFront('a');
 cout << s1.Disply() << endl;
}

void Test11()
{
 String s1("abcd");
 s1.PopFront();
 cout << s1.Disply() << endl;
}


int main()
{
 //Test1();
 Test2(); //測試PushBack
 //Test3();//測試Inser
 //Test4();  //測試Insert一個字符串
 //Test5();//測試PopBack
 //Test6();  //測試<
 //Test7();  //測試==
 //Test8();    //測試>
 //Test9();  //測試 Find
 //Test10();  //測試PushFront
 //Test11();  //測試PopFront
 return 0;
}


    

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定西市| 分宜县| 屯门区| 凉城县| 自治县| 措勤县| 绵竹市| 万年县| 康平县| 中超| 岳阳市| 舒兰市| 郁南县| 肃北| 吉隆县| 泸定县| 陵川县| 内乡县| 承德县| 长沙县| 锦屏县| 成安县| 任丘市| 交城县| 西乌珠穆沁旗| 重庆市| 六盘水市| 花莲市| 怀仁县| 霍州市| 武安市| 永登县| 仁布县| 定安县| 文登市| 绥芬河市| 鄢陵县| 隆尧县| 金沙县| 乐平市| 仲巴县|