封装cstring实现一个c++字符串处理类

本文介绍了一个自定义的字符串处理类库,提供了多种实用的字符串操作功能,如分割、替换、删除空白字符等,并详细展示了各个功能的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件:stringHandle.h

#include <string.h>

#include <vector>


using namespace std;


#define MAX_LENGTH 10000000000


class stringHandle
{
public:
stringHandle();
stringHandle(char * str);
stringHandle(char * str,int length);
stringHandle(int num);//将数字转化成字符串
~stringHandle();




int splitString(char *spliter);//分割字符串
int replace(char *source,char *target);//替换子串
int deleteSpace();//删除空格
int deleteSubStr(char* SubStr);//删除子串
int reverse();//反转
int toInt();//转换成整形
int deleteTailSpace();//删除尾行空格
void print();






char* mString;
int lengthmString ;
vector <char *> subStrings;
int numSubStrings;

};


cpp文件:stringHandle.cpp

#include <iostream>
#include "stringHandle.h"


using namespace std;
//传入参数为数组首地址或者字符串常量首地址
stringHandle::stringHandle()
{
mString = NULL;
subStrings.clear();
lengthmString = 0;
numSubStrings = 0;
}


stringHandle::stringHandle(char * str)
{
int length = strlen(str);
mString = new char [length+1];
if(mString == NULL)
{
cout << "malloc failed!" << endl;
}
else
{
memset(mString,0,length+1);
memcpy(mString,str,length);
}
numSubStrings = 0;
lengthmString = strlen(mString);
}


stringHandle::stringHandle(char * str,int length)
{
mString = new char [length+1];
mString = new char [length+1];
if(mString == NULL)
{
cout << "malloc failed!" << endl;
}
else
{
memset(mString,0,length+1);
memcpy(mString,str,length);
}
numSubStrings = 0;
lengthmString = strlen(mString);
}


stringHandle::stringHandle(int num)
{
char str[MAX_LENGTH];
memset(str,0,MAX_LENGTH);
sprintf(str, "%d",num);


int length = strlen(str);
mString = new char [length+1];
if(mString == NULL)
{
cout << "malloc failed!" << endl;
}
else
{
memset(mString,0,length+1);
memcpy(mString,str,length);
}
numSubStrings = 0;
lengthmString = strlen(mString);


}
stringHandle::~stringHandle()
{

//释放mString
if(mString != NULL)
{
delete [] mString;
mString = NULL;
}
lengthmString = 0;


//释放子串地址
if(subStrings.size())
{
for(int i=0;i<(int)subStrings.size();i++)
{
delete [] subStrings[i];
}
subStrings.clear();
numSubStrings = 0;
}

}


int stringHandle::splitString(char* spliter)
{
if(mString == NULL)
{
cout << "mString is NULL" << endl;
return -1;
}
char* subStr = NULL;
char* noUse = NULL;
subStr = strtok_s(mString, spliter,&noUse);

    while( subStr != NULL )
    {
        char* temp = new char [strlen(subStr)+1];
if(temp == NULL)
{
cout <<"malloc failed!"<< endl;
return -1;
}
int d = strlen(subStr);
memset(temp,0,strlen(subStr)+1);
memcpy(temp,subStr,strlen(subStr));
subStrings.push_back(temp);
temp = NULL;


        subStr = strtok_s(NULL, spliter,&noUse);
    }
numSubStrings = subStrings.size();
return 0;
}


int stringHandle::deleteSpace()
{
int ret = stringHandle::replace(" ","");
return ret;
}


int stringHandle::deleteSubStr(char* SubStr)
{
int ret = stringHandle::replace(SubStr,"");
return ret;
}


int stringHandle::reverse()
{
char temp[MAX_LENGTH] = {0};
for(int i=0,j=strlen(mString)-1;i<strlen(mString);i++,j--)
{
temp[i] = *(mString+j);
}
memcpy(mString,temp,strlen(mString));
return 0;
}


int stringHandle::toInt()
{
return atoi(mString);
}












int stringHandle::replace(char *source,char *target)
{
if(mString == NULL)
{
cout <<"mString empty!"<< endl;
return -1;
}
//核心函数 strstr,返回字符串所在位置的指针
int replaceTimes = 0;
char newString[MAX_LENGTH] = {0};
char *position = mString;
char *positionPre = mString;


while(position != NULL)
{
positionPre = position;
position = strstr(positionPre,source);
if(position)
{
strncat(newString,positionPre,position-positionPre);
strncat(newString,target,strlen(target));
position += strlen(source);
}
else
{
strcat(newString,positionPre);
}
}
//构造新的字符串
char *newstr = new char [strlen(newString)+1];
if(!newstr)
{
cout << "melloc failed" << endl;
return -1;
}



memset(newstr,0,strlen(newString)+1);
memcpy(newstr,newString,strlen(newString));


delete [] mString;
mString = newstr;
lengthmString = strlen(mString);


return 0;
}


int  stringHandle::deleteTailSpace()
{
int length = strlen(mString);
for(int i = length-1;i>=0;i--)
{
if(*(mString+i)== ' ')
{
*(mString+i) = '\0';
}
else
{
break;
}
}
lengthmString = strlen(mString);
return 0;
}


void stringHandle::print()
{
cout << mString << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值