鱼C论坛

 找回密码
 立即注册
查看: 2161|回复: 1

求助

[复制链接]
发表于 2014-6-20 17:29:06 | 显示全部楼层 |阅读模式
3鱼币
本帖最后由 风之残月 于 2014-11-10 10:24 编辑

1. 设计一个具有如下功能的简单字符串类,并写出其驱动函数(main函数)。
1)设置新的字符串(SetS());
2)返回字符串(getS());
3)从字符串中获取并返回任意子串(getSubS());
4)获取并返回字符串中指定位置的字符(getC());
5)返回字符串长度(strLen())。
提示:字符串类至少应包含两个属性(数据成员):contex用来存放任意字符序列(可以用字符数组或字符指针),strlen用来存放字符串的长度(字符个数);

要求用C++实现。求帮助。不够可以追加悬赏。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-20 17:29:07 | 显示全部楼层
#include <iostream>
#include <cstring>
#include <cassert>
using namespace std;

class MyString {
public:
        MyString(){
                MakeEmptyString();
        }
        ~MyString() {
                delete[] contex;
        }
        void SetS( const char* str );
        const char* getS()const { return contex; }

        MyString getSubS( int start_pos, int length )const;
        
        char getC( int pos ) const {
                assert( pos>=0 && pos<strlen );
                return contex[pos];
        }
        char& getC( int pos ) {
                assert( pos>=0 && pos<strlen );
                return contex[pos];
        }
        unsigned int strLen() const { return strlen; }

        MyString( const MyString& str ) {
                MakeEmptyString();
                SetS( str.contex );
        }

        MyString& operator=( const MyString& str) {
                if( this == &str ) return *this;
                SetS( str.contex );
        }

private:
        char* contex;
        unsigned int strlen;
        void MakeEmptyString() {
                contex = new char[1];
                strlen = 0;
                contex[0]=0;
        }
};

void MyString::SetS( const char* str ) {
        if( contex != str ) {
                strlen = ::strlen(str);
                delete[] contex;
                contex = new char[strlen+1];
                strcpy( contex, str );
        }
}

MyString MyString::getSubS( int start_pos, int length )const {
        assert( start_pos>0 && start_pos<strlen );
        assert( length >0 && start_pos + length < strlen );
        MyString result;
        char * ptmp = new char[ length+1 ];
        for( int i=0;i<length; ++i ) ptmp[i] = contex[start_pos+i];
        ptmp[length]=0;
        result.SetS(ptmp);
        return result;
}

int main() {
        MyString str;
        cout<<"empty str:"<<str.getS()<<endl;
        str.SetS("0123456789");
        cout<<"Set str:"<<str.getS()<<endl;
        cout<<"Sub String from pos 2,length 3 is:"<<str.getSubS(2,3).getS()<<endl;
        cout<<"str[6] is:"<<str.getC(6)<<endl;
        str.getC(6) = 'a';
        cout<<"after str.getC(6) = 'a', str[6] is:"<<str.getC(6)<<endl;
        cout<<"th string length is :"<<str.strLen()<<endl;

        MyString str2 = str;
        cout<<"str2 call copy constructor with str is: "<<str2.getS()<<endl;

        MyString str3;
        str3 = str;
        cout<<"str3 call operator= with str is: "<<str3.getS()<<endl;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 04:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表