kirineko/一个C++题目

Created Sun, 08 May 2016 00:00:00 +0000 Modified Thu, 09 Mar 2023 01:17:44 +0800
453 Words
class String
{
public:
    //构造函数,给字符串str分配100个字节的存储空间,即字符串支持存储的最大长度为100
    String() {
        this->str = (char*)malloc(100);
    }
    void setString(char *str);  //输入字符串,也可以写成构造函数
    int getLength();  //返回字符串长度
    char* getString(); //返回内容
private:
    char *str;
};

void String::setString(char* str)
{
    strcpy(this->str, str);
}

int String::getLength()
{
    return strlen(this->str);
}

char* String::getString()
{
    char *s = (char*)malloc(100);
    strcpy(s,this->str);
    return s;
}

class Editstring : public String
{
private:
    unsigned int cursor; //定义一个指示位置的光标
public:
    /**
     * 正常情况应判断cur是否>=0,<length(str),此处主要表现算法,省略之,
     * 后续插入替换也应当先判断光标的位置,本题省略错误处理
     */
    void setCursor(int cur) {
        this->cursor = cur;
    }

    bool insert(char* substr); //在光标位置插入字符串
    bool replace(int num, char* substr); //将光标的num个字符组成的字符串替换成str
    bool remove(int num); //在光标处删除num个字符组成的字符串
};

bool Editstring::insert(char* substr)
{
    int sublength = strlen(substr); //要插入子串的长度
    int length = strlen(this->str); //原始字符串长度
    for(int i=length+sublength-1; i>this->cursor+sublength; i--)
    {
        this->str[i] = this->str[i-sublength];
    }
    for(int j=1; j<=sublength; j++)
    {
        this->str[this->cursor+j] = substr[j-1];
    }
    return true;
}

bool Editstring::replace(int num, char* substr)
{
    int sublength = strlen(substr);
    int length = strlen(this->str);
    for(int i=this->cursor + num + 1; i <= length; i++)
    {
        this->str[i - num] = this->str[i];
    }
    this->insert(substr);
    return true;
}

bool Editstring::remove(int num)
{
    int length = strlen(this->str);
    for(int i=this->cursor; i<= length; i++)
    {
        this->str[i-num] = this->str[i];
    }
    return true;
}

int main()
{
    String s1;
    char c1[] = "hello world";
    s1.setString(c1);

    std::cout<< s1.getLength() << std::endl;
    std::cout<< s1.getString() << std::endl;

    Editstring s2;
    s2.setString(c1);
    s2.setCursor(5);

    // char c2[] = "miao ";
    // s2.insert(c2);

    // char c3[] = "liyi";
    // s2.replace(2,c3);

    s2.remove(3);
    std::cout<< s2.getString() <<std::endl;


    return 0;
}