[C++]字符串处理方法(STL与C风格)

STL string
1、初始化-把c字符串转换成string
char s[]="abc e df";
string str=s;
string str(5,'x');//初始化为5个x

2、查找
从前开始搜索:str.find(目标子串,开始搜索位置)
从后开始搜索:str.rfind
如查找不到目标,则返回string::npos

3、替换
str.replace(开始下标,覆盖长度,替代字符串,可加<使用代替字符串长度>)
当覆盖长度填为0时,其实就是插入操作。

4、删除
str.erase(开始下标,删除长度)

5、插入
str.insert(开始下标,插入字符串)

6、比较
str.compare(与str对比的字符串)
-1为str小,1为str大,0为相等。如果前段相等短的小。

7、返回c风格字符串
str.c_str();//返回值是const char*

8、分割
string substr (开始下标,截取长度);

c风格字符串
1、分割

char *p=strtok(s,d);//第一次得到结果,s为目标串,d为tok
while(p){
    cout<<p<<endl;
    p=strtok(NULL,d);//得到后续结果,目标串用NULL代替
}

2、比较
strcmp(s1,s2); //-1为s1小,1为s2小,0为相等。如果前段相等短的小。

3、连接(加到目标串尾部)
char *strcat(char *dest,char *src);
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符
串。

4、复制
char *strcpy(char *dest,char *src);
把src的字符串连\0复制到dest,必须保证dest有足够空间。

5、长度
unsigned int strlen(char *s);
计算字符串s的(unsigned int型)长度,不包括结束符\0。

6、字符串与数字的转换

itoa(int i,char *p result,进制),一般进制填10,表示十进制。

任意的小数整数转字符串,都可以用sprintf(result,格式"%d",i)

对于字符串转数字,atoi和atof使用就比较简单了,直接传入需要转换的数字即可。

自行封装函数:

https://github.com/iyjhabc/simple_algorithm

/*把strBig包含的strsrc替换成strdst*/
void string_replace(string & strBig, const string & strsrc, const string 
&strdst) {
    string::size_type pos=0;
    string::size_type srclen=strsrc.size();
    string::size_type dstlen=strdst.size();
    while( (pos=strBig.find(strsrc, pos)) != string::npos){
      strBig.replace(pos, srclen, strdst);
      pos += dstlen;
    }
}

void string_replace(char *strBig, const char *strsrc, const char *strdst) 
{
    string strtmp(strBig);
    string::size_type pos=0;
    string::size_type srclen=strlen(strsrc);
    string::size_type dstlen=strlen(strdst);
    while( (pos=strtmp.find(strsrc, pos)) != string::npos){
      strtmp.replace(pos, srclen, strdst);
      pos += dstlen;
    }
  strcpy(strBig,strtmp.c_str());
}

 

posted @ 2013-05-10 11:29  iyjhabc  阅读(668)  评论(0编辑  收藏  举报