String類的簡單實現

實現說明:字符串類String的簡單實現,內部採用字符數組實現

運行平臺:VS2010

參考:http://rsljdkt.iteye.com/blog/770072

經驗說明:拷貝構造函數、重載賦值運算符、實現析構函數三個操作在實現自定義類時往往同時出現。


Cpp代碼 收藏代碼
  1. #include <iostream>

  2. usingnamespace std;

  3. class String{

  4. public:

  5. String(constchar *str = NULL);//默認構造函數

  6. String(const String &str);//複製構造函數

  7. ~String();//析構函數

  8. String operator+(const String & str);//字符串連接

  9. String & operator=(const String &str);//字符串賦值

  10. bool operator==(const String &str);//判斷是否字符串相等

  11. int Length();//獲取字符串長度

  12. friend ostream & operator<<(ostream &o,const String &str);//重載輸出

  13. String SubStr(int start, int end);//求子字符串(start ... end-1)

  14. private:

  15. char * charArray;

  16. };

  17. String::String(constchar *str)

  18. {

  19. if(str == NULL){

  20. charArray=newchar[1];

  21. charArray[0]='\0';

  22. }else{

  23. charArray=newchar[strlen(str)+1];

  24. strcpy(charArray,str);

  25. }

  26. }

  27. String::String(const String &str)

  28. {

  29. charArray = newchar[strlen(str.charArray)+1];

  30. strcpy(charArray,str.charArray);

  31. }

  32. String::~String()

  33. {

  34. delete [] charArray;

  35. }

  36. String String::operator+(const String &str)

  37. {

  38. String res;

  39. delete [] res.charArray;//釋放原有空間

  40. res.charArray = newchar[strlen(charArray)+strlen(str.charArray)+1];

  41. strcpy(res.charArray,charArray);

  42. strcpy(res.charArray+strlen(charArray),str.charArray);

  43. return res;

  44. }

  45. String & String::operator=(const String &str)

  46. {

  47. if(charArray == str.charArray)

  48. return *this;

  49. delete [] charArray;

  50. charArray = newchar[strlen(str.charArray)+1];

  51. strcpy(charArray,str.charArray);

  52. return *this;

  53. }

  54. bool String::operator==(const String &str)

  55. {

  56. return strcmp(charArray,str.charArray) == 0;

  57. }

  58. int String::Length()

  59. {

  60. return strlen(charArray);

  61. }

  62. ostream & operator<<(ostream &o, const String &str)

  63. {

  64. o<<str.charArray;

  65. return o;

  66. }

  67. String String::SubStr(int start, int end)

  68. {

  69. String res;

  70. delete [] res.charArray;//釋放原有內存

  71. res.charArray = newchar[end-start+1];//重新申請內存

  72. for(int i=0; i+start<end; i++){

  73. res.charArray[i]=charArray[start+i];

  74. }

  75. res.charArray[end-start] = '\0';

  76. return res;

  77. }

  78. void test()

  79. {

  80. String s = "abcd";

  81. String t = "abcd";

  82. cout<<s<<(s==t?" == ":" != ")<<t<<endl;

  83. String s2 = "Hello ";

  84. String s3 = "China!";

  85. cout<<s2+s3<<endl;

  86. cout<<(s2+s3).SubStr(0,s2.Length()+s3.Length())<<endl;

  87. }

  88. int main()

  89. {

  90. test();

  91. system("pause");

  92. }


運行結果:


Cpp代碼 收藏代碼
  1. abcd == abcd

  2. Hello China!

  3. Hello China!

  4. 請按任意鍵繼續. . .


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章