鱼C论坛

 找回密码
 立即注册
查看: 2697|回复: 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++实现。求帮助。不够可以追加悬赏。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  5. class MyString {
  6. public:
  7.         MyString(){
  8.                 MakeEmptyString();
  9.         }
  10.         ~MyString() {
  11.                 delete[] contex;
  12.         }
  13.         void SetS( const char* str );
  14.         const char* getS()const { return contex; }

  15.         MyString getSubS( int start_pos, int length )const;
  16.        
  17.         char getC( int pos ) const {
  18.                 assert( pos>=0 && pos<strlen );
  19.                 return contex[pos];
  20.         }
  21.         char& getC( int pos ) {
  22.                 assert( pos>=0 && pos<strlen );
  23.                 return contex[pos];
  24.         }
  25.         unsigned int strLen() const { return strlen; }

  26.         MyString( const MyString& str ) {
  27.                 MakeEmptyString();
  28.                 SetS( str.contex );
  29.         }

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

  34. private:
  35.         char* contex;
  36.         unsigned int strlen;
  37.         void MakeEmptyString() {
  38.                 contex = new char[1];
  39.                 strlen = 0;
  40.                 contex[0]=0;
  41.         }
  42. };

  43. void MyString::SetS( const char* str ) {
  44.         if( contex != str ) {
  45.                 strlen = ::strlen(str);
  46.                 delete[] contex;
  47.                 contex = new char[strlen+1];
  48.                 strcpy( contex, str );
  49.         }
  50. }

  51. MyString MyString::getSubS( int start_pos, int length )const {
  52.         assert( start_pos>0 && start_pos<strlen );
  53.         assert( length >0 && start_pos + length < strlen );
  54.         MyString result;
  55.         char * ptmp = new char[ length+1 ];
  56.         for( int i=0;i<length; ++i ) ptmp[i] = contex[start_pos+i];
  57.         ptmp[length]=0;
  58.         result.SetS(ptmp);
  59.         return result;
  60. }

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

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

  73.         MyString str3;
  74.         str3 = str;
  75.         cout<<"str3 call operator= with str is: "<<str3.getS()<<endl;
  76. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 04:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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