使用字符数组部分实现 MyString 类,方便其他开发人员使用。
1)该题目中类似模拟 string 的操作,培养开发库的能力。
2)使用字符数组实现,不能直接调用 string 或者 CString 等类库。
3)使用 String 类示例
满足示例要求,使用字符数组部分实现 MyString 类
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥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