StrFun.h
#ifndef STRFUN_H_
#define STRFUN_H_
#include<string>
#include<sstream>
#include<algorithm>
#include<iostream>
using namespace std;
class CStrFun
{
public:
CStrFun();
virtual ~CStrFun();
static string itos(long long i)
{
stringstream s;
s<<i;
return s.str();
}
static void Str2Lower(string &source,int nLen);
static string::size_type FindCase(string haystack,string needle);
static string::size_type FindCaseFrom(string haystack,string needle,int From);
static void ReplaceStr(string &str,string srstr,string dsstr);
static void EraseStr(string &str,string substr);
//靜態(tài)函數(shù),歸屬于類空間的函數(shù)
};
#endif /* STRFUN_H_ */
StrFun.cpp
#include"StrFun.h"
CStrFun::CStrFun()
{
}
CStrFun::~CStrFun()
{
}
//將string中的大寫字母變成小寫字母
void CStrFun::Str2Lower(string &str,int nLen)
{
int i;
for(i=0;i<nLen;i++)
if(str[i]>='A'&&str[i]<='Z')
str[i]+=32;
return;
}
//toupper(ch):將ch變成大寫字母,該函數(shù)為比較函數(shù),不分字母大小寫的比較['A'=='a']
bool _nocase_compare(char c1,char c2)
{
return toupper(c1)==toupper(c2);
}
/*
功能:
找到haystack字符串中needle出現(xiàn)的位置,注意點(diǎn)就是,例如:
haystack="AAABBBCCC"
needle="abbbc"
則返回的是2
haystack="AAABBBCC"
needle="ABBBC"
則返回的是2
[我們這里是忽略字母的大小寫的比較]
*/
string::size_type CStrFun::FindCase(string haystack,string needle)
{
if(haystack.empty())
return string::npos;
if(needle.empty())
return string::npos;
string::iterator pos;
pos=search(haystack.begin(),haystack.end(),needle.begin(),needle.end(),_nocase_compare);
if(pos==haystack.end())
return string::npos;
else
return (pos-haystack.begin());
}
/*
功能:
同上
不同的是,多了一個(gè)參數(shù)nFrom,指示的是haystack的第nFrom位置開始查找
而上面的函數(shù)是在第0個(gè)位置開始查找.
*/
string::size_type CStrFun::FindCaseFrom(string haystack,string needle,int nFrom)
{
if(haystack.empty())
return string::npos;
if(needle.empty())
return string::npos;
string::iterator pos;
pos=search(haystack.begin()+nFrom,haystack.end(),needle.begin(),needle.end(),_nocase_compare);
if(pos==haystack.end())
return string::npos;
else
return (pos-haystack.begin());
}
/*
功能:
刪除str中所有的substr子字符串
*/
void CStrFun::EraseStr(string &str,string substr)
{
if(str.size()==0||substr.size()==0)
return;
string::size_type idx=0;
string::size_type sub_length=substr.length();
idx=str.find(substr,idx);//從字符串str中的idx位置開始查找substr
while(idx!=string::npos)
{
str.erase(idx,sub_length);//刪除字符串str從idx位置開始的長(zhǎng)為sub_length個(gè)字符
idx=str.find(substr,idx);
}
return;
}
/*
功能:
在str中找到所有的srstr字串,并用dsstr字串代替
不要求刪除的字串同插入的字串相同.
*/
void CStrFun::ReplaceStr(string &str,string srstr,string dsstr)
{
if(str.size()==0||srstr.size()==0)
return;
string::size_type idx=0;
string::size_type sub_length=srstr.length();
idx=str.find(srstr,idx);
while(idx!=string::npos)
{
str.replace(idx,sub_length,dsstr);//刪除str中從idx位置開始的長(zhǎng)為sub_length個(gè)字符,然后用字符串dsstr代替
if(idx+dsstr.size()>str.size())
break;//str最尾端的字符串都被dsstr代替了,則結(jié)束,因?yàn)椴豢赡苷业絪rstr字符串了
idx=str.find(srstr,idx+dsstr.size());//加快類匹配速度,而且防止了匹配覆蓋
}
return;
}