m0_73734906 2022-12-19 21:43 采纳率: 0%
浏览 17

自写string类 怎么实现

自写的string类无法实现正常运行

main.cpp


```c++
#include <iostream>
#include "class.h"
using namespace std;
int start,end,index;
char *myStr,c;

using namespace std;

int main(){
    String (myStr);
    int x;
    cin>>x;
    while(x!='@'){
        switch(x){
            case 0:
                int len();
            case 1:
                cin>>start>>end;
                myStr.substr( start,  end);
                break;
            case 2:
                cin>>c;
                cout<<myStr.find_first_of( c);
                break;
            case 3:
                cin>>index>>c;
                myStr.add_before( index,  c);
                break;
            case 4:
                cin>>index;
                myStr.delete_at ( index);
                break;
            case 5:
                myStr.printStr ();
                break;
            default: break;
        }
    }
    return 0;
}




class.h


```c++
#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED

class String {
private:
      char *myStr;
      int mylen;
public:
      // TO DO
       // 默认构造函数
    String(char *myStr =0);
    // 复制构造函数
    String(const String &str);
    // 析构函数
    ~String();
    // 0:获取字符串长度
    int len();
    // 1:求子字符串[start,end]
    void substr(int start, int end);
      // 2:查找首次出现字符c的位置
      int find_first_of(char c);
      // 3:在index处添加字符c
      void add_before(int index, char c);
      // 4:删除某个位置上的字符
      void delete_at (int index);
      // 5:输出字符串
      void printStr ();

      char get(int i);
};

#endif // CLASS_H_INCLUDED


class.cpp

#include "class.h"
#include <iostream>
#include <cstring>
using namespace std;

int String:: len(){
    return mylen;
}
String::String(char *myStr){
    char s[1000];
    cin.getline(s,1000,'\n');
    mylen=strlen(s);
    myStr=new char[mylen];
    strcpy(myStr,s);
}
String::String(const String &str){
    mylen=str.mylen;
    for(int i=0;i<mylen;++i){
        *(myStr+i)=str.myStr[i];
    }
}
String::~String(){
    delete myStr;
}
void String:: substr(int start, int end){
    for(int i=start;i<=end;++i){
        cout<<*(myStr+i);
    }
}
int String::find_first_of(char c){
    int i=0;
    for(;i<mylen;++i){
        if(*(myStr+i)=='c'){
            return i;
        }
    }
    return -1;
}
void String::add_before(int index, char c){
    mylen++;
    char *s=new char[mylen+1];
    strcpy(s,myStr);
    delete myStr;
    myStr=s;
    for(int i=mylen;i>index+1;--i){
        myStr[i]=myStr[i-1];
    }
    myStr[index+1]=c;
}
void String::delete_at (int index){
    for(int i=index;i<mylen-1;++i){
        *(myStr+i)=*(myStr+i+1);
    }
    mylen--;
}
void String::printStr (){
    for(int i=0;i<mylen;++i){
        cout<<*(myStr+i);
    }
    cout<<'\n';
}
char String::get(int i){
    return *myStr+i;
}


  • 写回答

1条回答 默认 最新

  • orbitgw 新星创作者: C/C++技术领域 2022-12-20 00:46
    关注

    请说一下哪里有问题

    评论

报告相同问题?

问题事件

  • 创建了问题 12月19日