基础不行啊

最近在学数据结构

用C实现数据结构,其实之前C多多少少都有看的

只是学的不够完整。。。

挺无语,现在遇到一些问题了。得把C系统地过一遍才能继续刷数据结构了

苦逼!

但是遇到困难不能气馁,一定要想:自己是否足够努力,是否可以想办法去克服?

所以暂时先把C系统地过一遍,再继续看数据结构把

尽量两周内搞定~

posted on 2018-09-21 01:54  田安Anne 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/EvilAnne/p/9684287.html

当然可以!我们**在你原来的基础上进行修改**,不改变你的类结构和调用方式,只修复 `sub_string` 函数中导致 `"34"` 没有被删除的问题。 --- ## ✅ 你原来的调用方式 ```cpp hstring s3; s3.set_string("123456789"); hstring s4; s4.set_string("234"); s3.sub_string(s4.c_str()); printf("删减后的字符串为:%s", s3.c_str()); ``` --- ## ✅ 你遇到的问题 你原来的 `sub_string` 函数逻辑可能只前移了子串后面的字符,但**没有覆盖掉子串本身**,导致 `"234"` 被删除后,原本 `"56789"` 前移 3 位,但 `"34"` 仍然保留在前面。 --- ## ✅ 正确的 `sub_string` 函数实现(在你原有类基础上修改) 我们假设你的类结构如下: ```cpp class hstring { private: char* cstr; int bufsize; int uselen; int find_substring(const char* sub) const; // 你自己实现的查找函数 public: hstring(); ~hstring(); void set_string(const char* str); int sub_string(const char* sub); const char* c_str() const; }; ``` ### ✅ 修改 `sub_string` 函数如下: ```cpp int hstring::sub_string(const char* sub) { if (!sub || !cstr) { printf("输入为空\n"); return -1; } // 计算子串长度 int sub_len = 0; while (sub[sub_len] != '\0') sub_len++; if (sub_len == 0) { printf("子串为空\n"); return -1; } if (uselen == 0 || cstr[0] == '\0') { printf("主字符串为空\n"); return -1; } int pos = find_substring(sub); if (pos == -1) { printf("未找到子串\n"); return -1; } // 将子串后面的字符前移,覆盖子串 int i = pos; while (i + sub_len < bufsize && cstr[i + sub_len] != '\0') { cstr[i] = cstr[i + sub_len]; i++; } cstr[i] = '\0'; // 添加字符串结束符 uselen -= sub_len; return 0; } ``` --- ## ✅ 修改 `find_substring` 函数(确保查找正确) ```cpp int hstring::find_substring(const char* sub) const { if (!cstr || !sub) return -1; int i = 0; while (cstr[i] != '\0') { int j = 0; while (sub[j] != '\0' && cstr[i + j] == sub[j]) { j++; } if (sub[j] == '\0') { return i; // 找到子串起始位置 } i++; } return -1; } ``` --- ## ✅ 你调用后就能正确输出 ```cpp hstring s3; s3.set_string("123456789"); hstring s4; s4.set_string("234"); s3.sub_string(s4.c_str()); printf("删减后的字符串为:%s\n", s3.c_str()); // 输出:156789 ``` --- ## ✅ 举个例子说明 原字符串:`"123456789"` 要删除 `"234"`: - `pos = 1` - `sub_len = 3` - 把 `"56789"` 前移 3 位,覆盖 `"234"`,结果变成 `"156789"` --- ## ✅ 总结:你只需要修改两个函数 | 函数名 | 是否需要修改 | 修改内容 | |--------|--------------|----------| | `find_substring` | ✅ 是 | 确保查找逻辑正确 | | `sub_string` | ✅ 是 | 修正字符前移逻辑,确保完全覆盖子串 | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值