扩充String类
来源:互联网 发布:如何学好高中数学知乎 编辑:程序博客网 时间:2024/05/23 00:36
前面貌似还有问题。想写重载=赋值后前面崩溃的问题突然消失了。。。。后面结果对了,但是还是不熟练。。追求更简练。。。。思维方式才是王道。。。
再补充一句,重载赋值没写好。。。。
#include<iostream>#include<cmath>#include<cstring>#include<string>using namespace std;class String{public: String(){len=0;p=NULL;} //默认构造函数 String(const char *s); String(String &str); //构造函数 ~String(){if(!p)delete []p;}//这个函数要理解。。。。多理解下。。。 void display();// String& operator=(String &ss); friend String operator+(String&s1,String&s2); friend String operator-(String&s1,String&s2); friend String operator * (String &s1,int n ); //未实现,先发出来了 friend String operator / (String &s1,String &s2 );//未实现,先发出来了private: char *p; int len; //字符型指针,用于指向字符串};char* FrontSpace(char*aa){ int len=strlen(aa); int i=0;//,j=0; while(aa[i]==' ')i++;// while(aa[i]!='\0')// aa[j++]==aa[i++];// aa[j]='\0'; char*bb=new char[len-i]; strcpy(bb,aa+i); return bb;}char* BackSpace(char*aa){ int len=strlen(aa); while(aa[len-1]==' ')len--; aa[len]='\0'; char*bb=new char[len+1]; strncpy(bb,aa,len); bb[len]='\0'; return bb;}String::String(const char *s){len=strlen(s);p=new char[len+1];strcpy(p,s);}String::String(String &str){ len=str.len; p=new char[len+1]; strcpy(p,str.p);}void String::display(){cout<<p<<endl;}//String& String::operator=(String &ss)//{// len=ss.len;// p=new char[len+1];// strcpy(p,ss.p);// return *this;//}String operator+(String&s1,String&s2){ String nn; nn.len=s1.len+s2.len; nn.p=new char[nn.len+1]; strcpy(nn.p,s1.p); strcpy(nn.p+s1.len," "); strcpy(nn.p+s1.len+1,s2.p); return nn;}String operator-(String&s1,String&s2){ s1.p=BackSpace(s1.p); s1.len=strlen(s1.p); s2.p=FrontSpace(s2.p); s2.len=strlen(s2.p); String nn; nn.p=new char[s1.len+s2.len+1]; strcpy(nn.p,s1.p);// strcpy(nn.p+s1.len," "); strcpy(nn.p+s1.len,s2.p); return nn;}String operator*(String &s1,int n ){String ss;ss.len=s1.len*n;ss.p=new char[ss.len+1];for(int i=0;i<n;i++)strcpy(ss.p+s1.len*i,s1.p);return ss;}bool Equal(const char *a,const char *b){ if(strlen(b)>strlen(a)) return false; int n=strlen(b); for(int i=0;i<n;i++)if(a[i]!=b[i]) return false; return true;}//char*Delete(char*a,char*b)//{// int blen=strlen(b);// char*c=new char[strlen(a)-blen];// strcpy(c,a+blen);// return c;//}String operator/(String &s1,String &s2 ){ int m=0;for(int i=0;i<s1.len;i++){if(Equal(s1.p+i,s2.p)){ m++; int j=i; int n=strlen(s2.p); for(;j<s1.len-n;j++)s1.p[j]=s1.p[j+n]; --i;//呵呵,我自己独创的瓦,。或许别人早写过了,但是这里是我自己想到的。。思维的力量哇。。 //为什么要加--i是因为每次检测到相同的时候,后面的字母要前移,但是,i要是保持不动的话,就会错过相同。 //也就是没有这句的话,两个连续的相同是消除不掉的。 s1.p[s1.len-m*n]='\0'; }}return s1;}int main( ){ String string1("Hello "),string2(" World"); cout<<endl; String string3; string3=string1-string2; string3.display(); string3=string1*8; string3.display(); String string4("8ololololololololol234ololol5678ololol"); String string5("ol"); string4.display(); string4/string5; string4.display(); return 0;}
0 0
- 扩充string类
- 扩充String类
- 扩充String类
- 扩充String类
- 【项目5-扩充String类】
- 【项目4-扩充String类】
- 扩充String类(逐渐修改版)
- 第八周项目4-扩充String类
- 第八周项目4扩充string类
- C++第8周项目5 - 扩充String类
- 第八周项目五----string类的扩充
- C++第8周(春)项目4 扩充String类
- 第8周项目四扩充string 类
- Strings扩充String的功能
- JavaScript prototype, 扩充String对象
- 扩充类chain
- C#扩充类
- unity PlayerPrefs类扩充
- HWND句柄可以转换成对象的this指针吗?
- BIOS简单设置-解析集成显卡内存占用问题
- uva563 - Crimewave 拆点+链接表的最大流
- DBMS_FILE_TRANSFER用法取asm下文件
- 2013年工作总结
- 扩充String类
- Xcode 5 中的推送做法
- 子网掩码 快速计算
- java中request取得客户端的ip地址
- linux 内核中ip字符串与整数相互转换 手动实现inet_aton 与inet_ntoa 的功能
- wifi浅析
- Android中UI线程与后台线程交互设计的5种方法
- java中request接收数组(即request接收多个同名参数)
- 黑马程序员_java第六天基础总结