C++ 重写String类

一、运行环境

codeblocks

gcc version 4.9.2 (tdm-1)


二、String内部描述

1、构造方法

构造方法 描述
String(char *s,int len) 构造方法初始化数据

2、功能描述

成员方法 描述
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) 在指定字符串的指定位置添加某字符

3、操作文件功能

操作文件方法 描述
void write_copy(char s1[30]) 字符串复制结果写入文件
void write_connect(char s1[30]) 字符串连接结果写入文件
void write_compare(char s1[15],char s2[15],int flag) 字符串比较(compare)结果写入文件
void write_substring(char s1[15],char s2[15],int sub_start,int sub_end) 将所求子串写入文件
void write_exchange(char s1[15],char s2[15],int flag) 字符串交换前后数据写入文件
void write_BF_Find_String(char str[15],char s[15],int find_string_value) 字符串的查找结果写入文件
void write_indexOf(char str[15],char index,int pos) 将某字符在字符串第一次出现的位置写入文件
void write_LowerAndUpperCase(char s1[15],char s2[15]) 将转换大小写结果写入文件
void write_trim(char s1[15],char s2[15]) 消除字符串中的空格后结果写入文件
void write_SplitStr(char s1[15],char s2[15]) 消除常用标点符号,!”“#$%&’()*+,-./的结果写入文件
void write_set(char s1[15],char s2[15],int index,char one_letter) 将某字符添加到某字符串的某个位置的结果写入文件
void write_reverse_str(char s1[15],char s2[15]) 将字符串翻转后写入文件
void write_initvalue(int n) 起始写入文件的字符串
char * read(int count) 读取文件指定位置的字符串

三、依赖

  • #include< iostream>
  • #include< string.h>
  • #include< fstream>
  • #include< malloc.h>

四、源码(不含测试)

    /*************************************************************************
    > File Name: 重写string类
    > Author: 浅然
    > Mail: [email protected]
    > Created Time: 2018年05月21日 星期一 14时11分34秒
 ************************************************************************/

#include
#include
#include
#include

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<<"复制完成"<0){                      //com>0得出str>b
                cout<>i;

            while(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= 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 = 0;
            int j = strlen(str);
           // char *s = str;
            //str = (char*)realloc(s,100);

            for(i = strlen(str)-1 ; i > index ; i--){
                str[i+1] = str[i];
            }
            str[i+1] = str[i];
            str[i] = letter;
            str[j+1] = '\0';
            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<<"文件打开失败!"<>MAX;
    cout<<"\n请输入字符串: \n";
    write_initvalue(MAX);
    decorate();
    cout<<"\n";
    cout<<"1————字符串复制\n\n";
    cout<<"2————字符串连接\n\n";
    cout<<"3————字符串比较\n\n";
    cout<<"4————字符串求子串\n\n";
    cout<<"5————字符串交换\n\n";
    cout<<"6————查找指定的字符串\n\n";
    cout<<"7————查找某字符在字符串第一次出现的位置\n\n";
    cout<<"8————将字符串所有字符都转换为大写\n\n";
    cout<<"9————将字符串所有字符都转换为小写\n\n";
    cout<<"10———消除字符串中的空格\n\n";
    cout<<"11———消除字符串中常用标点符号\n\n";
    cout<<"12———将字符添加到字符串的指定位置\n\n";
    cout<<"13———字符串翻转\n\n";
    cout<<"0————退出\n\n";

    cout<<"请输入一个整型m,选择你此时将使用第几行字符串: ";
    while(cin>>m){
        if(m<=0||m>MAX){
            cout<<"\n输入的m不在指定范围内,请重新输入:";
            continue;
        }
        break;
    }

    String str_ing(read(m),12);                       //创建str_ing对象
    char *temp = new char[strlen(str_ing.getStr())+1];//用于交换的临时字符指针
    cout<<"此时的string为 : "<>k){
        switch(k){
          case 1:
                cout<<"此时你的操作字符串为"<>m;
                strback = str_ing.Strcpy(read(m));
                write_copy(strback);
                cout<<"\n复制完成后的string :";
                cout<>m;
                strback =  str_ing.Strcat(read(m));
                write_connect(strback);
                cout<<"\n连接后的字符串:"<>m;
                compare_string_value = str_ing.Compare(read(m));
                write_compare(str_ing.getStr(),read(m),compare_string_value);
                decorate();
                break;
          case 4:
                int sub_start,sub_end;
                cout<<"此时你的操作字符串为"<>sub_start>>sub_end;
                cout<<"所求子串为:   ";
                strback = str_ing.substring(sub_start,sub_end);
                write_substring(strback,str_ing.getStr(),sub_start,sub_end);
                cout<>m;
                strcpy(temp,str_ing.getStr());
                write_exchange(str_ing.getStr(),read(m),0);
                str_ing.exchange(read(m)) ;
                write_exchange(str_ing.getStr(),temp,1);
                decorate();
                break;
          case 6:
                cout<<"此时你的操作字符串为"<>letter;
                find_string_value = str_ing.BF_Find_String(letter);
                write_BF_Find_String(str_ing.getStr(),letter,find_string_value);
                decorate();
                break;
          case 7:
                cout<<"此时你的操作字符串为"<>index;
                pos = str_ing.indexOf(index);
                if(pos){
                    cout<>index>>one_letter;
                while(1){
                    if(index >= 0 && index < strlen(str_ing.getStr())){
                        break;
                    }
                    cout<<"输入范围有误,请重新输入(0-"<>index>>one_letter;
                }
                str_ing.set(index,one_letter);
                cout<

五、控制台操作界面

1、目录

C++ 重写String类_第1张图片

2、部分操作演示

C++ 重写String类_第2张图片

3、写入文件

C++ 重写String类_第3张图片


工程下载—github

工程下载—CSDN下载

你可能感兴趣的:(●,C/C++)