string类封装
class cMyString
{
char* m_str;
int m_strSize;
public:
cMyString();//指针指向一个空字符串
cMyString(char* str);//字符串初始化
~cMyString();
char* getStr()const;
int getSize();//获得成员变量字符串的长度
void setStr(char* str);//重新设置对象的成员变量的字符串
void MyStrCat(char* str);//对象的成员变量字符串连接字符串
void MyStrCat(cMyString* str);//对象的成员变量字符串连接成员变量字符串
void MyStrCpy(char* str);//字符串拷贝到对象的成员变量字符串
void MyStrCpy(cMyString* str);//别的cMyString成员变量字符串拷贝shis对象成员变量字符串
int MyStrCmp(char* str);//字符串和对象的成员变量比较,为0相等 为正this->对象变量字符串大 为负this->对象变量字符串小
int MyStrCmp(cMyString* str);//别的cMyString成员变量字符串和对象的成员变量比较,为0相等 为正this->对象变量字符串大 为负//this->对象变量字符串小
int MyFindChar(char c);// 查找单个字符的下标
int MyFindStr(char* str);//从成员字符串中找字符串
};
cMyString::cMyString(){ m_str = new char; m_str = '\0'; }
cMyString::cMyString(char* str)
{
if (NULL==str)
{
m_str = new char; m_str = '\0';
}
int len = strlen(str);
m_str = new char[len + 1];
strcpy(m_str, str);
}
cMyString::~cMyString(){ delete[] m_str; }
int cMyString::getSize(){ return strlen(m_str); }
char* cMyString::getStr()const { return m_str; }
void cMyString::setStr(char* str)
{
delete[] m_str;
if (NULL == str)
{
m_str = new char; m_str = '\0';
}
int len = strlen(str);
m_str = new char[len + 1];
strcpy(m_str, str);
}
void cMyString::MyStrCat(char* str)
{
int len1 = strlen(m_str);
int len2 = strlen(str);
char* tmp = new char[len1 + len2 + 1];
strcpy(tmp, m_str);
strcat(tmp, str);
delete[]m_str;
m_str = tmp;
}
void cMyString::MyStrCat(cMyString* str)
{
MyStrCat(str->m_str);
}
void cMyString::MyStrCpy(char* str)
{
if (NULL==str)
{
return;
}
delete m_str;
m_str = NULL;
int len = strlen(str);
m_str = new char[len + 1];
strcpy(m_str, str);
}
void cMyString::MyStrCpy(cMyString* str)
{
MyStrCpy(str->m_str);
}
int cMyString::MyStrCmp(char* str)
{
return strcmp(m_str, str);
}
int cMyString::MyStrCmp(cMyString* str)
{
return MyStrCmp(str->m_str);
}
int cMyString::MyFindChar(char c)
{
int i = 0;
char* tmp = m_str;
while (*tmp)
{
if (*tmp==c)
{
return i;
}
tmp++; i++;
}
return - 1;
}
//djklsf323
int cMyString::MyFindStr(char* str)
{
if (str==NULL)
{
return -1;
}
int lenSubStr = strlen(str);
int lenM = getSize();
if (lenM==0 )
{
return -1;
}
int iPos = 0;
while (iPos<=lenM-lenSubStr)
{
int j = 0;
while (*(str+j)==*(m_str+iPos+j))
{
++j;
if (*(str+j)=='\0')
{
return iPos;
}
}
++iPos;
}
// int len1 = getSize();
// unsigned short len2 = strlen(str);
// if (str == NULL || *str == '\0' || len2>len1)
// {
// return -1;
// }
// int i = 0;
// char*tmp = m_str;
// while (strlen(tmp)>=len2)
// {
// char temp;
// temp=*(tmp + len2);
// *(tmp + len2) = 0;
// if (strcmp(tmp,str)==0)
// {
// *(tmp + len2) = temp;
// return i;
// }
// *(tmp + len2) = temp;
// i++; tmp++;
// }
return -1;
}
int _tmain()
{
cMyString str1("123abc45tggf");
int x=str1.MyFindStr("tgg");
str1.getSize();
return 0;
}