作业要求

代码:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring> class MyString
{
char *_str;
int _len;
public:
MyString()
{
_str = new char[];
_len = ;
}
MyString(const char *str)
{
if (str == NULL)
{
_str = new char[];
*_str = '\0';
}
else
{
int _len = strlen(str);
_str = new char[_len + sizeof(char)];
strcpy(_str, str);
} }
~MyString()
{
delete[]_str;
} char *GetString()
{
return _str;
}
//设置字符串
void SetString(const char *str)
{
delete[]_str;
int _len = strlen(str);
_str = new char[_len + sizeof(char)];
strcpy(_str, str);
} //通过下标取得字符
char GetChar(int index)
{
if(index<=strlen(_str) && index >= )
return _str[index];
return ;
} //求字符串长度
unsigned int GetStringLens()
{
unsigned int index = ;
while (_str[index])
{
index++;
}
return index;
} //求数组的长度
unsigned int GetArryLens()
{
return sizeof(_str) / sizeof(_str[]);
} //批量修改其中的某个字符为其它某个字符
char * MyCharReplace(char dest,char source)
{
while (*_str!='\0')
{
if (*_str == dest)
{
*_str = source;
}
*_str++;
}
return _str;
} //在末尾追加字符
void MyAddEnd(char c)
{
char tmp[] = { c,'\0' };
MyString::MyAddEnd(tmp);
}; // 在末尾追加字符串
void MyAddEnd(char *str)
{
_str = strncat(_str, str, strlen(str) + sizeof(char));
} // 在末尾追加整数
void MyAddEnd(int num)
{
char tmp[]={};
sprintf(tmp,"%d",num);
MyString::MyAddEnd(tmp);
} //在末尾追加浮点数
void MyAddEnd(double num)
{
char tmp[] = { };
sprintf(tmp, "%8.3lf", num);
MyString::MyAddEnd(tmp);
} //在末尾追加MyString
void MyAddEnd()
{
_str = strncat(_str, _str, strlen(_str) + sizeof(char));
} //从头 弹出一个字符
char PopupHead()
{
int index = ;
char tmp = _str[index];
while(_str[index]!=)
{
_str[index] = _str[index + ];
index++;
}
return tmp;
} //从末尾弹出一个字符
char PopupEnd()
{
int index = ;
while (_str[index] != )
{
index++;
}
char tmp = _str[index-];
_str[index-] = ; return tmp;
}
}; int main()
{
MyString demo1("我爱你中国!"); //MyString demo2(); MyString demo("I Love Mark");
demo.SetString("i love HaoZaiYi"); std::cout << demo.GetString() << " "<<demo.GetChar() << std::endl;
std::cout << demo.GetStringLens() << " " << demo.GetArryLens() << std::endl;
demo.MyAddEnd('y');
std::cout << demo.GetString() << std::endl;
demo.MyAddEnd("aaaaa");
std::cout << demo.GetString() << std::endl;
demo.MyAddEnd();
std::cout << demo.GetString() << std::endl;
demo.MyAddEnd(123456.789);
std::cout << demo.GetArryLens() << std::endl;
std::cout << demo.PopupHead() << demo.PopupEnd() << std::endl;
std::cout << demo.PopupHead() << demo.PopupEnd() << std::endl;
std::cout << demo.PopupHead() << demo.PopupEnd() << std::endl;
std::cout << demo.PopupHead() << demo.PopupEnd() << std::endl;
std::cout << demo.MyCharReplace('o','@') << " "<< demo.GetString() << std::endl; return ;
}

高亮部分,代码没有达到作业要求。有bug待解决。

第3天作业 PoEdu MyString实现的更多相关文章

  1. PoEdu - C++阶段班【Po学校】- Lesson03-4_构造函数&赋值函数&拷贝构造函数&学习方式 - 第6天

    PoEdu - C++阶段班[Po学校]- 第6天 课堂选择题目: 1  关于转换构造函数  ClassDemo demo = 1;  调用转换构造函数 2  关于拷贝赋值函数  demo =2; 首 ...

  2. PoEdu - C++阶段班【Po学校】- 第3天

    引用 C中指针的功能强大,使用起来繁杂,因为指针要控制的东西太多:有指针的类型,指针的解引用,指针空间内的值,它本身是有空间的,有自己的地址等.指针也是强大的,比如:我们要在函数之内,修改方法之外的值 ...

  3. 程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1

    描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8 ...

  4. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  5. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  6. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

  7. T-SQL检查停止的复制作业代理,并启动

        有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...

  8. Python09作业思路及源码:高级FTP服务器开发(仅供参考)

    高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...

  9. 个人作业week3——代码复审

    1.     软件工程师的成长 感想 看了这么多博客,收获颇丰.一方面是对大牛们的计算机之路有了一定的了解,另一方面还是态度最重要,或者说用不用功最重要.这些博客里好些都是九几年或者零几年就开始学习编 ...

随机推荐

  1. Java白皮书的关键术语

    “白皮书”可以在http://www.oracle.com/technetwork/java/langenv-140151.html上找到. 1.简单性. 2.面向对象. 3.网络技能(Network ...

  2. java 平台 权限管理

    最近在做公司内部的物流业务平台的权限管理,感触颇多.记录一下 权限管理分两部分:数据权限和操作权限. 数据权限: 这个是和用户相关的. 因为平台是多机构的,所以再考虑数据权限的时候,是按照机构来管理的 ...

  3. Linux内核分析总结

    张潇月 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习目录: (1)计算机是如何工作的   h ...

  4. html focus事件小学问

    focus事件千万不要有alert方法,不然在有些浏览器会进入死循环的.例如:$('#test').focus(function(){ alert('dead loop'); }); 在chrome下 ...

  5. NodeJs解析web一例

    var http = require('http'); var fs = require('fs'); var url = require('url'); http.createServer(func ...

  6. 在php里写sql查询需要注意的事情

    ---恢复内容开始--- 今天往php里写了一条sql查询, $sql = "select * from videos where vuser=".$u: $ret = mysql ...

  7. 三张图片详解Asp.Net 全生命周期

    用三张图片详解Asp.Net 全生命周期 下面我们使用三张图片解析ASP.net的整个生命周期,我总感觉使用图片更加的清楚的说明这种问题,所以使用的这样方式 说明: 1  第一张图片从全局说明从客户端 ...

  8. ibatis map

    <select id="selectBank2" parameterClass="java.util.Map" resultClass="jav ...

  9. mac系统,git上刚刚checkout出来的文件,一检查,发现已经被修改过了,怎么破???

    如下图中所示: 事实上,checkout之后什么都还没做,这些文件为何就被修改? 检查一下别的电脑上所存放的同一套源码,原来出问题的文件都是同名文件,只不过是有大小写区分而已!!! linux系统可以 ...

  10. JSTL标准标签库 (使用foreach打印集合)

    <%@page import="java.util.*"%><%@ page language= "java" contentType=&qu ...