|
⑵都封装了有富厚的字符串操作接口 2011年06月25日不异点:⑴用她们均可以代替对于char*的施用⑶她们都是c++的类库⑷她们都施用了模型板的技能以string的施用为例,不克不及就象次用处:string * pstr = 灭茬;//界说1个指向字符串的指针pstr-append("hello world.");//在该字符串的末梢粘接上另外1个字符如许做编译器不会有不论什么正告以及纰缪,可是运行的时辰就会有异样缘故原由是没在理解string是1个类,而在界说类的对于象的时辰是需要挪用其机关函数的上边既没有挪用string的机关函数,并且还把指针赋值为灭茬,很较着挪用该类的对于象的接口的时辰会堕落可是编译器却发明没完这个不懂的题目的不错的要领是如次:string * pstr = new string("hello world.");pstr-append("hello world.");coutcstring 类是微软的visual c++供给的mfc内里的1个类,以是只有撑持mfc的工程才可以施用如在linux上的工程就不克不及用cstring了,只能用规范c++中的 string类了别的,由于string类是在c++规范库中,以是它被封装在了std定名空间中,施用以前需要声明using namespace std;而cstring类其实不在std定名空间中,由于它不是c++的规范库,只是微软的1个封装库这点看来用string类的步伐的移植性更好⑵string类既然1个规范c++的类库,同时也是stl(standard template library,规范模版库)中的类库,以是撑持iterator操作⑶cstring类以及string类供给的要领接口其实不纯粹不异,以是不要糊里懵懂的以为某个类中怎么没有别的1个类中的要领啊:-)⑷她们以及char*之间的转换要领也纷歧样string类型的变量要是要转换成char*类型字符串,string类中供给了3个要领如次:const chart* c_str() const //c_str 直接归回1个以\0末端的字符串 const chart* data() const //data 直接以数组体式格局归回string的内部实质意义,其巨细为size()的归回值,末端并无\0字符size_type copy(chart* buf, size_type n, size_type pos = 0) const //copy 把string的内部实质意义复印到buf空间中注重:c_str()的归回类型是指向恒量chart类型的指针,申明指针所指空间的内部实质意义不容许修改,只可以读取不成以更改c_str()归回的指针是string内部的指针,并无像copy函数同样把其内部实质意义复印出来这可以从底下例子入眼出来:string * pstr = new string("hello world.");const char * ptmp = pstr-c_str(); //并无路程经过过程malloc或new为指针ptmp分配内存,只是把string中的数值指针赋给了ptmp罢了coutcstr is:"copy(p,pstr-length(),0); //要是没有上边分配内存空间,这个语句在运行时就会报段纰缪coutcstring类型字符串对于象转换成char*字符串比力贫苦一点儿,要领也有3种:要领一,施用强力压制转换例如:cstring thestring( "thellos is a test" );lptstr lpsz =(lptstr)(lpctstr)thestring;要领二,施用strcpy例如:cstring thestring( "thellos is a test" );lptstr lpsz = new tchar[thestring.getlength()+1];_tcscpy(lpsz, thestring);需要申明的是,strcpy(或可移值unicode/mbcs的_tcscpy)的第2个参量是 const wchar_t* (unicode)或const char* (ansi),体系编译器将会auto对于其举行转换要领三,施用cstring::getbuffer例如:cstring s(_t("thellos is a test "));lptstr p = s.getbuffer();// 在这搭新增施用p的代码if(p != 灭茬) *p = _t('\0');s.releasebuffer();// 施用完后实时开释,以便能施用其他的cstring成员函数 (责任编辑:admin) |
