作业1
字符串是程序设计中频繁使用的一类非常重要的数据。请设计一个简单字符串类(CSimpleString),使CSimpleString对象比普通的字符(char)数组更安全、更易于使用。
a)功能说明:CSimpleString对一个可变长度字符串(char *)数据进行封装,提
供字符串的存储分配和释放;提供基于字符串数据的通用操作和运算符重载。
b)需求说明:
i.构造函数。CSimpleString提供3种构造函数:
1.空构造函数:创建一个空字符串对象。
例:CSimpleString str;
2.接收一个字符串指针(char *)的构造函数:使用一个已知的字符串构
造对象。
例:CSimpleString str(“abc”);
3.拷贝构造函数:可以用一个CSimpleString对象构造另一个
CSimpleString对象。
例:CSimpleString str0(“abc”); CSimpleString str(str0);
ii.字符串操作与运算符重载
1.赋值运算符(=)重载:允许将一个字符串指针直接赋值给一个
CSimpleString对象,也允许将一个CSimpleString对象赋值给另一个
CSimpleString对象;
例:CSimpleString str0(“abcd”), str1; str1 = “abc”; str1 = str0;
2.字符串连接(+、+=):允许将一个CSimpleString对象和一个字符串
指针相加(连接),也允许将一个CSimpleString对象和另一个
CSimpleString相加(连接);
例:CSimpleString str0(“abc”), str1;
str1 = str0+“abc”; //此时,str1为“abcabc”
str1 += “abc”; //此时,str1为“abcabcabc”
3.字符串比较(<, >, ==)允许比较两个CSimpleString对象的大小,返
回值即为两个对象分别封装的字符串的之间大小。(提示:用友员函数
实现)
例:CSimpleString str(“abc”), str2(“adc”);
if (str < str2)
{cout << “str < str2”}…
4.字符串输出(<<):输出CSimpleString对象所封装的字符串;
例:CSimpleString str(“abc”); cout << str;
5.强制类型转换运算符(const char *);
例:CSimpleString str; const char* p = (const char *)str;
6.下标运算符[];
例:CSimpleString str(“abc”); char ch = str[1]; //此时,ch=‟b‟iii.其它操作
1.获取字符串的长度GetLength();
2.判断字符串是否为空IsEmpty(),如果当前字符串为空,返回true,否
则返回false;
3.清空当前字符串empty();
4.将当前字符串变成大、小写字符串MakeUpper()、MakeLower();
5.将当前字符串倒置MakeReverse();
6.去除当前字符串的前导和后缀空格字符TrimLeft()、TrimRight()
例:
CSimpleString str=(“abcdef ”);
str.TrimLeft();
// 此时,str=”abcdef ”
str.TrimRight();
// 此时,str=”abcdef”
str.MakeUpper();
// 此时,str=”ABCDEF”
str.MakeReverse();
// 此时,str=”FEDCBA”
7.字符插入和删除操作
a)Insert character at zero-based index; concatenates, if index is past end
of string
void Insert(int nIndex, char ch);
b)Delete nCount characters starting at zero-based index if possible. If
delete successfully, return true, otherwise return false
bool Delete(int nIndex, int nCount = 1);
例:
CSimpleString str(“abc”);
str.Insert(1, …d‟);
// 此时,str=”adbc”
str.Insert(6, …z‟);
/
/ 此时,str=”adbcz”;
str.Delete(1, 2);
// 此时,str=”acz”
#include <iostream.h>
class SimpleString
{
public:
int Delete(int i,int j);
void Insert(int i,char c);
void TrimRight();
void TrimLeft();
void Del(int n);
void MakeReverse();
void MakeLower();
void MakeUpper();
void Empty();
bool IsEmpty();
int GetLength();
operator const char*();
char& operator [](int i);
void operator =(SimpleString& s);
bool operator <(SimpleString& s);
bool operator >(SimpleString& s);
bool operator ==(SimpleString& s);
void operator +=(const char *s);
void operator =(const char *s);
friend SimpleString operator +(SimpleString s1,SimpleString s2);
friend SimpleString operator +(SimpleString s1,char s2[]);
void print() const;
friend ostream & operator<<(ostream &os,SimpleString s);
SimpleString();
SimpleString(const char *s);
SimpleString(const SimpleString& s);
virtual ~SimpleString();
char *buf;
};
#include "stdafx.h"
#include "SimpleString.h"
#include <string.h>
#include <iostream.h>
SimpleString::SimpleString()
{
buf = new char[1];
buf[0] = '\0';
}
SimpleString::SimpleString(const char *s)
{
int len = strlen(s);
buf = new char[len+1];
strcpy(buf, s);
}
SimpleString::SimpleString(const SimpleString& s)
{
buf = new char[strlen(s.buf)+1];
strcpy(buf, s.buf);
}
SimpleString::~SimpleString()
{
delete[] buf;
}
void SimpleString::print() const
{
cout<<buf<<endl;
}
ostream & operator<<(ostream &os,SimpleString s)
{
os << s.buf;
return os;
}
SimpleString operator + (SimpleString s1,SimpleString s2) {
SimpleString str;
int len = strlen(s1.buf)+strlen(s2.buf)+1;
char *temp = new char[len];
strcpy(temp, s1.buf);
strcat(temp, s2.buf);
str.buf = temp;
return str;
}
SimpleString operator + (SimpleString s1,char s2[])
{
SimpleString str;
int len = strlen(s1.buf)+strlen(s2)+1;
char *temp = new char[len];
strcpy(temp, s1.buf);
strcat(temp, s2);
str.buf = temp;
return str;
}
void SimpleString::operator =(const char *s)
{
int len = strlen(s)+1;
buf = new char[len];
strcpy(buf,s);
void SimpleString::operator =(SimpleString& s) {
//buf=new char[s.Getlenth()+1];]
buf=new char[strlen(s.buf)+1];
strcpy(buf,s.buf);
}
void SimpleString::operator +=(const char *s) {
int len = strlen(buf)+strlen(s)+1;
char *temp = new char[len];
strcpy(temp, buf);
strcat(temp, s);
delete[] buf;
buf = temp;
}
bool SimpleString::operator <(SimpleString& s) {
int m=strcmp(buf,s.buf);
if(m<0)
return true;
else
return false;
}
bool SimpleString::operator >(SimpleString& s) {
int m=strcmp(buf,s.buf);
if(m>0)
return true;
else
return false;
}
bool SimpleString::operator ==(SimpleString& s) {
int m=strcmp(buf,s.buf);
if(m==0)
return true;
else
return false;
char& SimpleString::operator [](int i) {
return buf[i];
}
SimpleString::operator const char*() {
return buf;
}
int SimpleString::GetLength()
{
return strlen(buf);
}
bool SimpleString::IsEmpty()
{
if(buf[0]=='\0')
return true;
else
return false;
}
void SimpleString::Empty()
{
buf[0]='\0';
}字符串长度1是什么意思
void SimpleString::MakeUpper() {
for (int i=0;buf[i]!=0;i++)
{
if(buf[i]>='a'&&buf[i]<='z')
buf[i]=buf[i]-32;
}
}
void SimpleString::MakeLower() {
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论