使用c++封装c的string函数
str.h
#ifndef STR_H
#define STR_H
#include <iostream>
using namespace std;
class myString
{
private:
char *str; //记录c风格的字符串
int size; //容量大小
int len; //实际长度
public:
//无参构造
myString():size(10),len(0)
{
str = new char[size]; //构造出一个长度为10的字符串
}
//有参构造
myString(const char *s)
{
len=strlen(s);
size=2*len;
str=new char [size];
int i=0;
while(s[i]!='\0'){
str[i]=s[i];
i++;
}
str[len]='\0';
} //有参构造 string s("hello wirld");
//判空函数
int isEmpty();
//size函数
int getSize();
int getlen();
//c_str函数
void info();
int strlen(const char *data);
void strcpy(char *data);
int strcmp(char *data);
void strcat(char *data);
//at函数
char at(int index);
//扩容
void expand();
};
#endif // STR_H
str.cpp
void myString::info(){
for(int i=0;i<len;i++){
cout<<str[i];
}
cout<<endl;
}
char myString::at(int index){
if(index<0||index>=len){
return '\0';
}
return str[index];
}
void myString::strcat(char *data){
int addlen=strlen(data);
while(len+addlen>size){
expand();
}
for(int i=len;i<=len+addlen;i++){
str[i]=data[i-len];
}
len+=addlen;
}
int myString::strcmp(char *data){
for(int i=0;i<=len;i++){
if(str[i]>data[i]){
return 1;
}else if(str[i]<data[i]){
return -1;
}
}
return 0;
}
void myString::expand(){
char *newstr=new char [2*size];
size*=2;
for(int i=0;i<=len;i++){
newstr[i]=str[i];
}
}
void myString::strcpy(char *data){
int newlen=strlen(data);
while(newlen>size){
expand();
}
len=newlen;
for(int i=0;i<=len;i++){
str[i]=data[i];
}
}
int myString::strlen(const char *data){
int count=0;
while(1){
if(data[count]=='\0'){
break;
}
count++;
}
return count;
}
int myString::getlen(){
return len;
}
int myString::getSize(){
return size;
}
int myString::isEmpty(){
return size==0?1:0;
}
main.cpp
int main()
{
myString data;
data.strcat("hello");
data.info();
cout<<"目前长度是:"<<data.getlen()<<endl;
cout<<"目前容器长度是:"<<data.getSize()<<endl;
data.strcat(" world");
data.info();
cout<<"目前长度是:"<<data.getlen()<<endl;
cout<<"目前容器长度是:"<<data.getSize()<<endl;
return 0;
}