Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1440670
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-03 22:19:16


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <cstring>
  3. #include <memory>
  4. using namespace std;

  5. class String
  6. {
  7.     friend ostream& operator<<(ostream&,String&);
  8.     friend istream& operator>>(istream&, String&);
  9. public:
  10.     String();
  11.     String(const char* src);
  12.     String(String& tmpStr);
  13.     String& operator=(String& tmpStr);
  14.     String operator+(String& tmpStr);

  15.     int size()
  16.     {
  17.         return strlen(str);
  18.     }
  19.     ~String()
  20.     {
  21.         delete[] str;
  22.     }
  23. private:
  24.     char* str;
  25. };
  26. String::String()
  27. {
  28.     if (NULL == str)
  29.     {
  30.         str = new char[1];
  31.         str = '\0';
  32.     }
  33. }
  34. String::String(const char* src)
  35. {
  36.     if (NULL == src)
  37.     {
  38.         str = new char[1];
  39.         str = '\0';
  40.     }
  41.     else
  42.     {
  43.         int len = strlen(src);
  44.         str = new char[len+1];
  45.         strncpy(str,src,len);
  46.         str[len]='\0';
  47.     }
  48. }
  49. String::String(String &tmpStr)
  50. {
  51.     if (tmpStr.str == NULL)
  52.     {
  53.         str = new char[1];
  54.         str = '\0';
  55.     }
  56.     else
  57.     {
  58.         int len = strlen(tmpStr.str);
  59.         str = new char[len+1];
  60.         strncpy(str,tmpStr.str,len);
  61.         str[len]='\0';
  62.     }
  63. }

  64. String& String::operator =(String& tmpStr)
  65. {
  66.     if (this != &tmpStr)
  67.     {
  68.         delete[] str;
  69.         if (tmpStr.str == NULL)
  70.         {
  71.             str = new char[1];
  72.             str = '\0';
  73.         }
  74.         else
  75.         {
  76.             int len = strlen(tmpStr.str);
  77.             str = new char[len+1];
  78.             strncpy(str,tmpStr.str,len);
  79.             str[len]='\0';
  80.         }
  81.     }
  82.     return *this;
  83. }
  84. String String::operator +(String& tmpStr)
  85. {
  86.     String newStr;
  87.     if (tmpStr.str == NULL)
  88.     {
  89.         newStr = *this;
  90.     }
  91.     else if (str == NULL)
  92.     {
  93.         newStr = tmpStr;
  94.     }
  95.     else
  96.     {
  97.         int len_str = strlen(str);
  98.         int len_tmp = strlen(tmpStr.str);
  99.         newStr.str = new char[len_str+len_tmp+1];
  100.         strncpy(newStr.str,str,len_str);
  101.         strncpy(newStr.str+len_str,tmpStr.str,len_tmp);
  102.         newStr.str[len_str+len_tmp] = '\0';
  103.     }
  104.     return newStr;
  105. }
  106. ostream& operator<<(ostream& os,String& Str)
  107. {
  108.     os<<Str.str;
  109.     return os;
  110. }
  111. istream& operator>>(istream& is, String& Str)
  112. {
  113.     is>>Str.str;
  114.     return is;
  115. }
  116. void main()
  117. {
  118.     String str1="111111111";
  119.     String str2="2222222222222222";
  120.     String str3 = str1+str2;
  121.     cout<<str3<<"\n"<<str3.size()<<endl;
  122. }
注意:字符串最后的‘\0’.否则会出现乱码
阅读(1926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~