头文件: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;
}