2012mfc,几种串

串,即是由符组成的串,在标准C,标准C++,MFC这一功能的实现不相同的,C++完全兼容了C.

1.标准C中的串

标准C中没有数据类型,C中的串是有类型的符数组类型的符指针来实现的.如:

cpp 复制代码
 char   name[26]="This is a Cstyle string";
//或
 char  *name="This is a Cstyle string";

类型的串\0结束标记,所占内存实际子符长度+1,要逐个字符的赋值初化与赋值,不知道是否修改,粒度太小,很不直观.

char*没有构造器,仅能由指针赋值,而且是个极其危险的操作,在声明char*时如果没有赋初值,建议,先按无效初化,以免出现悬浮指针地址不明的指针,否则,出错会让你很悲惨!

标准C中是没有类型,但是在C中有string.h头文件,注意,如下string.h中的非彼,<string.h>头文件中定义一些经常用到的操作串的函数,如复制strcpy函数,连接串strcat,比较串strcmp,这些函数的操作对象都是指向char*的串.

2.标准C++中的

C++支持C风格串的使用,而且引入了类的概念,为标准模板类STL定义的,几乎可从所有的串构造出来.

串类的头文件<string>,且要和usingnamespacestd;一起使用.<string>头文件和<string.h>头文件没有关系,前者是标准C++中的模板库类,后者是标准C中的包含常用C串处理函数头文件,如strcmp,前者并非是后者的升级版.

深刻理解标准C++一个类,如在标准C中定义如下:char*pt=NULL;无疑是正确的,但是在标准C++中定义string*pt=NULL;

这样做编译器不会有警告和错误,但是运行时就会有异常.这是因为一个类,定义类的对象时要调用其构造器,上例既没有调用其构造器,还把指针赋值为无效,很明显会出错.

正确的方法是用符号,C++中的不同于C中的malloc,new不但会分配一块内存,还调用类的构造器.string*pt=new("thisisac++stylestring");

不用指针string str;,系统自动调用默认的构造器,构造一个类的对象.

3.MFC中的CString类.

MFC中的串类CString,封装了的东西,并增加了一些接口,在功能上完全兼容类,而一些标准的C/C++不能直接对CString类操作,CString类是微软VC++提供的MFC里面的一个类,所以只有支持MFC的工程才可用.

如在linux上的工程就不能用CString了,只能用标准C++中的类了.另外,因为类是在c++标准库中,所以在std名字空间中封装它,用前要声明using namespace std;

CString类,并不在std名字空间中,因为它不是c++的标准库,只是微软的一个封装库.这点看来用类的程序的移植性更好.
CString提供的接口方法不同,对char*的转换也不同.

4.1CString的转换

cpp 复制代码
string str="ksarea";
CString cstr(str.c_str());
    //或`CString cstr(str.data());`初化时才行
cstr=str.c_str();或cstr=str.data();
str=cstr.GetBuffer(0);
    //`CString->string`
cstr.format("%s", str.c_str());
    //`string->CString`
cstr.format("%s", str.data());
    //`string->CString`
str = LPCSTR(cstr);
    //`CString->string`
 /*`c_str()`和`data()`区别是:前者返回带`'/0'`的串,后者则返回不带`'/0'`的串*/

4.2.CString的转换int i=123;

cpp 复制代码
CString str;
str.format("%d",i);
//`int->CString`其他的基本类型转换类似
i=atoi(str);
//`CString->int`还有`(atof,atol)4.3.char*`和`CString`的转换`CStringcstr="ksarea";`
char* ptemp=cstr.getbuffer(0);
char* str;
strcpy(str,ptemp);
    //`CString->char*`
cstr.releasebuffer(-1);
char*str="lovesha";
CString cstr=str;

char*->CString,类型不能直接赋值CString至于float,stringchar*间的转换可用强制转换,或标准库函数.
CString其他类型转换,方法有很多,但其实都殊途同归,首先转换类型为char*类型,因为char*不同类型间的桥梁.得到char*类型,再按其他类型转换就非常容易了.

相关推荐
dulu~dulu9 个月前
数据结构(六)----串
数据结构·kmp算法··朴素模式匹配算法
gobeyye1 年前
【详解】串(顺序串,链串)的基本运算(插入,链接,替换等全有)有给源码----看这一篇就够了
c语言·数据结构·c++·算法·链表··基本运算
亦世凡华、1 年前
数据结构--》探索数据结构中的字符串结构与算法
数据结构·经验分享·算法·
DAY Ⅰ1 年前
【数据结构】朴素模式匹配 & KMP算法
数据结构·c++·kmp算法··朴素模式匹配