本文比较了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 |