作业要求

代码:

#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待解决。

最新文章

  1. SSRS ----环境配置,没有 ReportServer DB 怎么办?
  2. CloudSim4.0报错NoClassDefFoundError,Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.distribution.UniformRealDistribution
  3. React Native知识1-FlexBox 布局内容
  4. 【CityHunter】服务器端设计思路
  5. JavaEE Log4j
  6. Java语法糖4:内部类
  7. SQLServer语句大使
  8. PostgreSQL9.2.4内核源码结构介绍
  9. 一些java考过的测试题和自己制作模拟服务端和客户端
  10. 《程序员面试金典(第5版)》【PDF】下载
  11. 解决win7中防火墙的0x6D9问题的方法
  12. Xcode出现may cause a leak非忽略的解决方法
  13. maven dependency的版本冲突问题
  14. Velocity中为什么要使用{}来明确标识变量
  15. Android Studio:Support Library依赖包的版本号
  16. 深入理解linux内核v4l2框架之videobuf2【转】
  17. python 全栈开发,Day49(超链接导航栏案例,background,定位,z-index,iconfont使用)
  18. hibernate flush clear的区别
  19. C# 灵活用法拾遗
  20. ifconfig-dropped

热门文章

  1. 怎么部署java项目(从搭建环境说起)
  2. avalon2.2.3发布
  3. WAP端 经验记录2
  4. background-position还可以这样用
  5. Java中的值传递和引用传递
  6. 循序渐进Python3(十)-- 2 -- SqlAlchemy
  7. spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 消息管理
  8. Redis(一)基础
  9. QT征程之初识qt
  10. 试一下SVG