本文比较了C,C++和Python中关于字符串处理的一些库函数。这里你可能会奇怪,Python和C/C++本来就不是同一层次上的语言,为什么要放在一起比较。这里就是参照Python来看看C++的字符串处理目前是一种什么情况。Python现在也属于一种很热门的脚本语言,它以其容易上手著称。它的库中提供了众多的函数、类和模块支持对字符串的处理。本文期望能够为使用C++的人提供一定的帮助。
在比较值钱,先区分一下C/C++中一下三个关于字符串处理的头文件的区别。
#include <string.h>
#include <cstring>
#include <string>
第一个是标准的C的字符串处理的库,它处理的对象是char []。第二个是经过C++包装的C标准字符串处理库,也就是说他们内容其实是完全一样的,它处理的当然还是char []。第三个就是C++中的string类库。本文做的比较主要是C string.h,C++ string和Python str。其中C++中字符串处理的库,不仅仅包含了STL中的也包含了准标准库Boost中的有关字符串处理的内容。
|
C |
C++ |
Python |
类型转换 |
|
Boost/conversion/lexical_cast
|
Int(),float(),long() |
元素访问 |
[] |
Iterators, [], at, |
'__getitem__' |
修改元素 |
[] |
assign
|
|
附加 |
strcat strncat |
+=,append,push_back,copy |
__add__,'join' |
插入 |
|
insert
|
|
删除 |
|
erase
|
|
替换 |
[] |
replace |
‘replace’’translate’ |
切片,子字符串 |
memcpy,memmove Strcpy,strncpy |
substr |
'__getslice__' |
比较 |
memcmp,strcmp, strcoll,strncmp,strxfrm |
compare |
== |
查找 |
memchr,strchr,strcspn strpbrk,strrchr,strspn strstr,strtok |
Find,rfind,find_first_of, find_last_of, find_first_not_of, find_last_not_of, boost/string_algor |
‘find’’index’’rfind’’rindex’ , _contains__'‘count’ |
大小及容量 |
strlen |
Size,length,max_size, resize,capacity, reserve,clear,empty |
__len__ |
修剪 |
|
Boost/string_algor |
‘strip’’rstrip’’expandtabs’ ’ljust’’lstrip’’rjust’’center’’zfill’ |
大小写 |
|
Boost/string_algor |
‘lower’’swapcase’’upper’’title’ Capitalize |
编解码 |
|
Boost/locale |
‘decode’’encode’ |
特点判断 |
|
Boost/string_algor |
‘endswith’’isalnum’’isalpha’ ’isdigit’’islower’’isspace’’istitle’ ’isupper’’startswith’ |
分割 |
|
Boost/string_algor |
‘rpartition’’rsplit’’splitlines’’split’’partition’ |
格式化 |
|
Boost/format |
‘format’ |
正则表达式 |
|
Boost/regex,boost/xpressive |
re |