[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()); }