m0_74279861 2022-12-14 10:06 采纳率: 33.3%
浏览 105
已结题

满足示例要求,使用字符数组部分实现 MyString 类

使用字符数组部分实现 MyString 类,方便其他开发人员使用。
1)该题目中类似模拟 string 的操作,培养开发库的能力。
2)使用字符数组实现,不能直接调用 string 或者 CString 等类库。
3)使用 String 类示例

img

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-12-14 15:28
    关注
    #include <iostream>
    using namespace std;
    
    int strlen(char *s)
    {
        int n = 0;
        while(s[n] != 0)
            n++;
        return n;
    }
    
    class String
    {
    protected:
        char *s;
    public:
        int getlen() { if(s==NULL) return 0;return strlen(s);}
        String() {s = NULL;}
        String(const char *a)
        {
            int len = strlen(a);
            s = (char*)malloc(len+1);
            for(int i=0;i<len;i++)
                s[i] = a[i];
            s[len] = 0;
        }
        String(const String &a)
        {
            int len = strlen(a.s);
            s = (char*)malloc(len+1);
            for(int i=0;i<len;i++)
                s[i] = a.s[i];
            s[len] = 0;
        }
        void operator = (const char *a);
        void operator = (String a);
        int index(const char *a);
        int lastIndex(const char *a);
        char *toUpperCase();
        char *Replace(char *a,char *b);
    };
    void String::operator = (const char *a)
    {
        int len = strlen(a);
        if(s != NULL)
            free(s);
        s = (char*)malloc(len+1);
        for(int i=0;i<len;i++)
            s[i] = a[i];
        s[len] = 0;
    }
    
    void String::operator = (String a)
    {
        int len = a.getlen();
        if(s != NULL)
            free(s);
        s = (char*)malloc(len+1);
        for(int i=0;i<len;i++)
            s[i] = a.s[i];
        s[len] = 0;
    }
    
    int String::index(const char *a)
    {
        if(s==NULL)
            return -1;
        int len = strlen(s);
        int n = strlen(a);
        int i,j;
        for(i=0;i<=len-n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(s[i+j] != a[j])
                    break;
            }
            if(j==n)
                return i;
        }
        return -1;
    }
    
    int String::lastIndex(const char *a)
    {
        if(s==NULL)
            return -1;
        int len = strlen(s);
        int n = strlen(a);
        int i,j;
        for(i=len-n;i>=0;i--)
        {
            for(j=0;j<n;j++)
            {
                if(s[i+j] != a[j])
                    break;
            }
            if(j==n)
                return i;
        }
        return -1;
    }
    
    char *String::toUpperCase()
    {
        if(s==NULL)
            return s;
        int i=0;
        while(s[i] != 0)
        {
            if(s[i]>='a' && s[i]<='z')
                s[i] -= 32;
            i++;
        }
        return s;
    }
    
    char *String::Replace(char *a,char *b)
    {
        if(s==NULL)
            return s;
        int n = index(a);
        int lena = strlen(a);
        int lenb = strlen(b);
        int len = strlen(s);
        int i=0,j,k=0;
        //
        while(n>=0)
        {
            i=0;
            k=0;
            char *p = (char*)malloc(len + lenb-lena+1);
            while(i<n)
            {
                p[i] = s[i];
                i++;
            }
            for(j=0;j<lenb;j++)
                p[i++] = b[j];
            while(s[n+lena+k] != 0)
            {
                p[i++] = s[n+lena+k];
                k++;
            }
            p[i] = 0;
            free(s);
            s = p;
            n = index(a);
        }
        return s;
    }
    
    int main()
    {
        String str1 = "hello";
        String str2;
        String str3 = str1;
        cout<<str3.index("llo")<<endl;
        cout<<str3.lastIndex("llo")<<endl;
        cout<<str1.toUpperCase()<<endl;
        cout<<str1.Replace("L","O")<<endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月14日
  • 已采纳回答 12月14日
  • 修改了问题 12月14日
  • 赞助了问题酬金15元 12月14日
  • 展开全部

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c