C++ 重写String类

匿名 (未验证) 提交于 2019-12-03 00:21:02

codeblocks

gcc version 4.9.2 (tdm-1)


构造方法 描述
String(char *s,int len) 构造方法初始化数据
成员方法 描述
char *getStr() 获取当前的String(打印)
int getLength() 获取当前String的长度
char *Strcpy(char *s) 字符串的复制
char *Strcat(char *s) 字符串的连接
int Compare(char *b) 字符串的比较
char *substring(int sub_start,int sub_end) 指定起始终止位置求子串
void exchange(char *s) 字符串的交换
int BF_Find_String(char *s) 在当前字符串String中查找子串
int indexOf(char index) 查找某字符在当前String中第一次出现的位置
void toUpperCase() 字符串小写转大写
void toLowerCase() 字符串大写转小写
char *trim() 消除字符串中的空格
char *SplitStr() 消除{,!”“#$%&’()*+,-./}的字符
void set(int index,char letter) 在指定字符串的指定位置添加某字符
  • #include< iostream>
  • #include< string.h>
  • #include< fstream>
  • #include< malloc.h>

/*************************************************************************     > File Name: 重写string类     > Author: 浅然     > Mail: xulinjie0105@gmail.com     > Created Time: 2018年05月21日 星期一 14时11分34秒  ************************************************************************/  #include<iostream> #include<string.h> #include<fstream> #include<malloc.h>  using namespace std; char s[15];//读取文件中的数据时存储在s数组中 /*  *String  *成员属性:*str,length  *成员方法:     1.显示构造器:String(char *s,int len)     2.析构器:~String()     3.获取此时的string:char *getStr()     4.获取此时的length:int getLength()     5.字符串的复制:char *Strcpy(char *s)     6.字符串的连接:char *Strcat(char *s)     7.字符串的比较:int Compare(char *b)     8.求子串:char *substring(int sub_start,int sub_end)     9.字符串的交换:void exchange(char *s)     10.查找字符串(BF):int BF_Find_String(char *s)     11.求出现某字符在指定字符串中第一次出现的位置:int indexOf(char index)     12.字符串小写转大写:void toUpperCase()     13.字符串大写转小写:void toLowerCase()     14.消除字符串中的空格:char *trim()     15.消除{,!""#$%&'()*+,-./}的字符:char *SplitStr()     16.在指定字符串的指定位置添加某字符:  void set(int index,char letter)  */ class String {     //成员变量     private:         char *str;         int length;     //构造器     public:         String(char *s,int len)         {             str=new char[strlen(s)+1];             strcpy(str,s);             length=len;         }         //析构器         ~String()         {             delete[] str;         }          /*          *获取此时的string          */         char *getStr(){             return str;         }         /*          *获取此时的length          */         int getLength(){             return length;         }         /*          *字符串的复制          */         char *Strcpy(char *s){             char *destinaton=new char[strlen(s)+1];//为destinaton开辟内存空间             strcpy(destinaton,s);                  //将s复制给destinaton             if(destinaton!=NULL){                  //如果destinaton不为空,说明复制完成,且成功                 cout<<"复制完成"<<endl;             }             if(str)                 delete[]str;                       //释放str指向的内存             str=destinaton;                        //将str指向destinaton所指向的地址(赋值)             length=strlen(destinaton);             //此时所用的字符串长度更新             return str;         }         /*          *字符串的连接          */         char *Strcat(char *s){             char *original = new char[strlen(s)+strlen(str)+1];//为original开辟内存空间             strcpy(original,str);                              //将str复制给original             strcat(original,s);                                //将s与original连接             if(original!=str){                                 //如果original与str不相等,说明连接完成,且成功                 cout<<"连接完成"<<endl;             }             return original;         }         /*          *字符串的比较          */         int Compare(char *b){             int flag = 0;                        //比较大小标志域             int com = strcmp(str,b);             //比较函数,得出大小              if(com == 0){                        //com==0得出str==b                 cout<<str<<"和"<<b<<"相等"<<endl;                 flag=0;             }              else if(com<0){                      //com<0得出str<b                 cout<<str<<"小于"<<b<<endl;                 flag=-1;             }              else if(com>0){                      //com>0得出str>b                 cout<<str<<"大于"<<b<<endl;                 flag=1;             }              return flag;         }          /*          *求子串          *设置开始和结束位置求出子串          */         char *substring(int sub_start,int sub_end)         {             char *low_string=new char[sub_end-sub_start+1];//为low_string开辟内存空间             int i=sub_start;                               //i初始化为所求子串在父串的初始位置             int j=0;                                       //j为递增变量              while(i<=sub_end){                             //确定i的范围,为low_string赋值                 low_string[j++] = str[i++];             }             low_string[j]='\0';             return low_string;         }          /*          *字符串的交换          */         void exchange(char *s)         {             char *temp_str = new char[length];      //为临时存放str的temp_str,开辟内存             char *temp_s = new char[strlen(s)+1];   //为临时存放s的temp_s开辟内存              cout<<"交换之前 :"<<s<<"\t"<<str<<endl;//打印交换前             strcpy(temp_str,str);                   //将str复制给temp_str,下同             strcpy(temp_s,s);             str=temp_s;                             //实现更新交互,更新str的值,下同             s=temp_str;             cout<<"交换之后 :"<<s<<"\t"<<str<<endl;//打印交换后         }          /*          *查找字符串(BF)          *设置从某位置开始查找子串          */         int BF_Find_String(char *s)         {             int a,b;             int i=0,j=0;              a=strlen(str);             b=strlen(s);             j=0;              cout<<(" 请输入数i,代表从主串s哪个位置开始\n");             cin>>i;              while(j<b && i<a)             {                 if(str[i]==s[j])                 {                     i++;                     j++;                 }                 else                 {                     i=i-j+2;                     j=1;                 }             }             if(j>=b){                 cout<<"匹配成功,查找成功\n";                 return 1;             }              else{                 cout<<"匹配失败,查找失败\n";                 return -1;             }          }          /*          *求出现某字符在指定字符串中第一次出现的位置          */         int indexOf(char index)         {             for(int i = 0;i < strlen(str);i++){                 if(str[i] == index){                     return i+1;                 }             }             return 0;         }          /*          *字符串小写转大写          */         void toUpperCase()         {             for(int i = 0; str[i]!='\0';i++){                 if( str[i]>='a' && str[i]<='z'){                     str[i] = str[i]-32;                 }             }         }          /*          *字符串大写转小写          */         void toLowerCase()         {             for(int i =0;str[i]!='\0';i++){                 if(str[i]>='A' && str[i]<='Z'){                     str[i] = str[i]+32;                 }             }         }          /*          *消除字符串中的空格          */         char *trim()         {             int j = 0;             int count = 0;             char *s = new char[strlen(str)+1];             for(int i = 0;i<strlen(str);){      //消除空格                 if(str[i] == ' '){                     i++;                     continue;                 }else{                     s[j++] = str[i];                     i++;                 }             }             s[j]='\0';                          //字符串结束             return s;         }          /*          *字符串分割          *消除{,!""#$%&'()*+,-./}的字符          */         char *SplitStr()         {             int j = 0;             char *s = new char[strlen(str)+1];             for(int i = 0 ;i < strlen(str);){                 if((int)str[i] >= 33 && (int)str[i] <= 47){                     i++;                 }else{                     s[j++] = str[i];                     i++;                 }             }             s[j] = '\0';             return s;         }          /*          *将字符添加到字符串指定位置          */         void set(int index,char letter)         {             int i;              str = (char*)realloc(str,strlen(str)*2);             for(i = strlen(str)-1 ; i > index;i--){                 str[i+1] = str[i];             }             str[i+1] = str[i];             str[i] = letter;             length++;         }          /*          *字符串翻转          */         char *reverse_str()         {             char temp;             char *temp_s = new char[strlen(str)+1];             strcpy(temp_s,str);                     //拷贝str到temp_s中             int i,j;             for(i=0;  ;i++)             {                 if(*(temp_s+i)=='\0')                 break;             }                                       //求字符串长度             i--;             for(j=0;j<=i;i--,j++)             {                 temp=*(temp_s+j);                 *(temp_s+j)=*(temp_s+i);                 *(temp_s+i)=temp;             }             return temp_s;                           //字符串翻转         }  };  /*  *以下是文件写入操作     1.字符串复制结果写入文件:void write_copy(char s1[30])     2.字符串连接结果写入文件:void write_connect(char s1[30])     3.字符串比较(compare)结果写入文件:void write_compare(char s1[15],char s2[15],int flag)     4.将所求子串写入文件:void write_substring(char s1[15],char s2[15],int sub_start,int sub_end)     5.字符串交换前后数据写入文件:void write_exchange(char s1[15],char s2[15],int flag)     6.字符串的查找结果写入文件:void write_BF_Find_String(char str[15],char s[15],int find_string_value)     7.将某字符在字符串第一次出现的位置写入文件:void write_indexOf(char str[15],char index,int pos)     8.将转换大小写结果写入文件:void write_LowerAndUpperCase(char s1[15],char s2[15])     9.消除字符串中的空格后结果写入文件: void write_trim(char s1[15],char s2[15])     10.消除常用标点符号,!""#$%&'()*+,-./的结果写入文件:void write_SplitStr(char s1[15],char s2[15])     11.将某字符添加到某字符串的某个位置的结果写入文件:void write_set(char s1[15],char s2[15],int index,char one_letter)     12.将字符串翻转后写入文件: void write_reverse_str(char s1[15],char s2[15])     13.起始写入文件的字符串:void write_initvalue(int n)     14.读取文件指定位置的字符串:char * read(int count)  */ /*  *copy结果写入文件  */ void write_copy(char s1[30]) {     ofstream out;//向文件写入数据      //out:以写的方式打开     //ate:打开文件后立即定位到文件末尾     //app:每次写操作前均定位到文件末尾     out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }      out<<"字符串复制\n";     out<<"copy:"<<s1<<"\n\n";     out.close();  }  /*  *connect结果写入文件  */ void write_connect(char s1[30]) {     ofstream out;//向文件写入数据      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }      out<<"字符串连接\n";     out<<"connect:"<<s1<<"\n\n";     out.close();  }  /*  *字符串比较(compare)结果写入文件  */ void write_compare(char s1[15],char s2[15],int flag) {     ofstream out;//向文件写入数据      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }      out<<"字符串比较\n";     if(flag == 0)         out<<s1<<"等于"<<s2<<"\n\n";     else if(flag == -1)         out<<s1<<"小于"<<s2<<"\n\n";     else if(flag == 1)         out<<s1<<"大于"<<s2<<"\n\n";     out.close();  } /*  *将所求子串写入文件  */ void write_substring(char s1[15],char s2[15],int sub_start,int sub_end) {     ofstream out;//向文件写入数据      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }     out<<"求子串\n";     out<<s2<<"通过起始位置:"<<sub_start<<"和结束位置"<<sub_end<<"所求的子串"<<s1<<"\n\n";     out.close();  }  /*  *字符串交换前后数据写入文件  */ void write_exchange(char s1[15],char s2[15],int flag) {     ofstream out;//向文件写入数据      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }     out<<"字符串交换\n";     if(flag){         out<<"字符串交换后:  old_string:"<<s1<<"\t"<<"new_string:"<<s2<<"\n\n";     }else{         out<<"字符串交换前: old_string:"<<s1<<"\t"<<"new_string:"<<s2<<"\n\n";     }  }   /*   *字符串的查找结果写入文件   */ void write_BF_Find_String(char str[15],char s[15],int find_string_value) {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }     out<<"字符串查找\n";     if(find_string_value == 1){         out<<str<<"与"<<s<<"匹配成功,查找成功\n\n";     }     else if(find_string_value == -1){         out<<str<<"与"<<s<<"匹配失败,查找失败\n\n";     }  }  /*  *将某字符在字符串第一次出现的位置写入文件  */ void write_indexOf(char str[15],char index,int pos) {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out){         cout<<"文件打开失败!"<<endl;     }     out<<"查找"<<index<<"在"<<str<<"中第几号位置第一次出现亦或没有\n";     if(pos){         out<<index<<"在"<<str<<"的第:"<<pos<<"\n\n";     }     else{         cout<<index<<"没有出现在string中\n\n";     }  }   /*  *将转换大小写结果写入文件  */ void write_LowerAndUpperCase(char s1[15],char s2[15]) {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }     out<<"字符串大小写转换\n";     out<<s1<<"转换为"<<s2<<"\n\n";     out.close();  }   /*   *消除字符串中的空格后结果写入文件   */  void write_trim(char s1[15],char s2[15])  {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }      out<<"忽略"<<s1<<"中的空格 : "<<s2<<"\n\n";  }   /*   *消除常用标点符号,!""#$%&'()*+,-./的结果写入文件   */  void write_SplitStr(char s1[15],char s2[15])  {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }      out<<"忽略"<<s1<<"中的标点 : "<<s2<<"\n\n";  }   /*   *将某字符添加到某字符串的某个位置的结果写入文件   */  void write_set(char s1[15],char s2[15],int index,char one_letter)  {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }      out<<s1<<"在"<<index<<"位置添加"<<one_letter<<"后 : "<<s2<<"\n\n";  }   /*   *将字符串翻转后写入文件   */  void write_reverse_str(char s1[15],char s2[15])  {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }      out<<s1<<"通过字符串翻转 : "<<s2<<"\n\n";  }   /*   *起始写入文件的字符串   */ void write_initvalue(int n) {     ofstream out;     int i=0;      out.open("d:\\j33.txt",ios::out);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }     cin.ignore(1);     while(i<n)     {         char s1[20];          cout<<"input "<<i+1<<" string :";         cin.getline(s1,15);         out<<s1<<"\n";         i++;     }     out<<"\n";     out.close();  }  /*  *读取文件指定位置的字符串  */  char * read(int count)  {     ifstream in;                        //从文件读取数据     in.open("d:\\j33.txt",ios::in);     //以读的方式打开     if(!in){         cout<<"文件打开失败!"<<endl;         return NULL;     }      while(count){         in.getline(s,15);               //从第一行开始,读到第count次,读到count行         count--;     }     in.close();//关闭流     return s; }  /*  *修饰作用(横线)  */ void decorate() {     ofstream out;      out.open("d:\\j33.txt",ios::out|ios::ate|ios::app);     if(!out)     {         cout<<"文件打开失败!"<<endl;     }     for(int i = 0;i < 40;i++){         cout<<"-";         out<<"-";     }     out<<"\n\n"; } 

1、目录


工程下载―github

工程下载―CSDN下载

文章来源: C++ 重写String类
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!