cstring类,如何从CString类型的字符串中取出数字
cstring类,如何从CString类型的字符串中取出数字详细介绍
本文目录一览: cstring是什么类型?
CString是MFC提供的一个非常方便的字符串类。常见的CString的使用方法可以看这篇文章。
http://www.vckbase.com/document/viewdoc/?id=1094
CString与string的区别
string 是 语言的东西 是c++语言的
CString 是VC++ IDE内嵌的,是MFC的
不是一个概念
CString 离开VC++不能用
string 在任何支持C++的IDE中都能用
CString 是MFC或者ATL中的实现,
string是C++标准库中的实现
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;
CString(typedef CStringT
<tchar, strtraitmfc
> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;
在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的泛型算法,没必要再自己去造车轮。
cstring类中substr的使用方法
substr方法,用于从一个字符串复制一个从指定位置开始,并具有指定长度的子字符串。如果length为0时将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。如果length为负数时,则子字符串将延续到字符串的结尾。
用法实例如下:
#include
#include
usingnamespacestd;
intmain()
{
_stringx="Hello_World";
_/*默认截取从0到npos.重载原型为stringsubstr(_off=0,_count=npos);npos一般表示为string类中不存在的位置,_off表示字符串的开始位置,_count截取的字符的数目*/
_cout
_cout
_cout
_/*
_备注:
_指定的截取长度加起始位置即_off+_count>源字符串的长度,则子字符串将延续到源字符串的结尾
_*/
}
Cstring 和string的区别
(1)CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。
(2)string类既是一个标准c++的类库,同时也是STL(Standard Template Library,标准模版库)中的类库,所以支持Iterator操作。
(3)CString类和string类提供的方法接口并不完全相同,所以不要糊里糊涂的认为某个类中怎么没有另外一个类中的方法啊。:-)。。
(4)他们和char*之间的转黄方法也不一样。
cstring和string的区别
CString/string 区别及其转化
利用MFC进行编程时,我们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。而一些标准C/C++库函数是不能直接对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。这里总结备忘于此!
首先要明确,标准C中是不存在string类型的,string是标准C++扩充字符串操作的一个类。但是我们知道标准C中有string.h这个头文件,这里要区分清楚,此string非彼string。string.h这个头文件中定义了一些我们经常用到的操作字符串的函数,如:strcpy、strcat、strcmp等等,但是这些函数的操作对象都是char*指向的字符串。
而C++的string类操作对象是string类型字符串,该类重装了一些运算符,添加了一些字符串操作成员函数,使得操作字符串更加方便。有的时候我们要将string串和char*串配合使用,所以也会涉及到这两个类型的转化问题。
1.CString和string的转化
stringstr="ksarea";
CStringcstr(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'的字符串*/
2.CString和int的转换
inti=123;
CStringstr;
str.format("%d",i);//int->CString 其他的基本类型转化类似
i=atoi(str);//CString->int 还有(atof,atol)
3.char*和CString的转换
CStringcstr="ksarea";
char* ptemp=cstr.getbuffer(0);
char* str;
strcpy(str,ptemp);//CString->char*
cstr.releasebuffer(-1);
char*str="lovesha";
CStringcstr=str;//char*->CString string类型不能直接赋值给CString
至于int与float、string与char*之间的转化可以使用强制转化,或者标准库函数进行。对于CString与其他类型的转化方法很多,但其实都殊途同归,朝着一个方向即将类型首先转化为char*类型,因为char*是不同类型之间的桥梁。得到char*类型,转化为其他类型就非常容易了。
C#中能使用mfc 的CString类对象吗?怎么用?
不能
一个CString对象由可变长度的一队字符组成。CString使用类似于Basic的语法提供函数和操作符。连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。
CString是基于TCHAR数据类型的对象。如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。在UNICODE方式下,CString对象由16位字符组成。非UNICODE方式下,CString对象由8位字符组成。
当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。注意,对于MBCS字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。
CString对象还具有下列特征: · CString可作为连接操作的结果而增大。
· CString对象遵循“值语义”。应将CString看作是一个真实的字符串而不是指向字符串的指针。
· 你可以使用CString对象任意替换const char*和LPCTSTR函数参数。
· 转换操作符使得直接访问该字符串的字符就像访问一个只读字符(C-风格的字符)数组一样。
提示:如果可能的话,应在框架中而不是堆中分配这个CString对象。这可以节省内存并简化参数的传递。
CString允许两个具有相同值的字符串共享相同的缓冲空间,这有助于你节省内存空间。但是,如果你初始直接改变该缓冲的内容(不使用MFC),则有可能在无意中改变了两个字符串。CString提供了两个成员函数CString::LockBuffer和CString::UnlockBuffer来帮助你保护你的数据。当你调用LockBuffer时,你就创建了一个字符串的一个拷贝,然后将引用计数设置为-1,这就“加锁”了该缓冲区。当缓冲区被加锁时,就没有其它的字符串可以引用该字符串中的数据,被加锁的字符串也不能引用其它字符串的数据。通过加锁该缓冲区内的字符串,就可以保证该字符串对数据的持续独占。当你使用完数据后,调用UnlockBuffer来将引用计数恢复为1。
CString类成员
构造 CString 以各种方法构造一个CString对象
字符串数组 GetLength 返回CString对象中的字符数。对多字节字符,按8位字符计算;即在一个多字节字符中一个开始和结束字节算作两个字符
IsEmpty 测试一个CString对象中是否不含有字符
Empty 强制一个字符串的长度为0
GetAt 返回在给定位置的字符
operator [] 返回在给定位置的字符--它是代替GetAt的操作符
SetAt 设置给定位置上的字符
operator LPCTSTR 像访问一个C风格的字符串一样,直接访问保存在一个CString对象中的字符
分配/串联 operator = 给CString对象赋一个新值
operator + 连接两个字符串并返回一个新字符串
operator += 把一个新字符串连接到一个已经存在的字符串的末端
比较 operator 比较操作符 比较操作符(大小写敏感)
Compare 比较两个字符串(大小写敏感)
CompareNoCase 比较两个字符串(不区分大小写)
Collate 比较两个字符串(大小写敏感,使用现场特别信息)
CollateNoCase 比较两个字符串(不区分大小写,使用现场特别信息)
提取 Mid 提取一个字符串的中间一部分(类似于BASIC的MID$函数)
Left 提取一个字符串的左边一部分(类似于BASIC的LEFT$函数)
Right 提取一个字符串的右边一部分(类似于BASIC的RIGHT$函数)
SpanIncluding 提取一个字符串,该子字符串中仅含有某一字符集合中的字符。
SpanExcluding 提取一个字符串,该子字符串中不含有某一字符集合中的字符。
其他转换 MakeUpper 将字符串中的所有字符转换为大写字符
MakeLower 将字符串中的所有字符转换为小写字符
MakeReverse 将字符串中的字符以倒序排列
Replace 用其它字符替换指定的字符
Remove 从一个字符串中移走指定的字符
Insert 在字符串中的给定索引处插入一个字符或一个子字符串
Delete 从一个字符串中删除一个或多个字符
Format 像sprintf函数一样格式化该字符串
FormatV 像vprintf函数一样格式化该字符串
TrimLeft 将字符串中前面的空格整理出字符串
TrimRight 将字符串中结尾的空格整理出字符串
FormatMessage 格式化一个消息字符串
搜索 Find 在一个较大的字符串中查找字符或子字符串
ReverseFind 在一个较大的字符串中从末端开始查找某个字符
FindOneOf 查找与某个字符集合中的字符相匹配的第一个字符
归档/存储 operator << 把一个CString对象插入一个存档或转储的环境中
operator >> 从一个存档中提取一个CString对象
缓冲区访问 GetBuffer 返回一个指向CString对象的指针
GetBufferSetLength 返回一个指向CString对象的指针,字符串被截断为指定的长度
ReleaseBuffer 释放对GetBuffer所返回的缓冲区的控制权
FreeExtra 通过释放原先为此字符串分配的额外内存来删除此字符串对象的额外开销
LockBuffer 使引用计数无效并保护缓冲区内的数据
UnlockBuffer 使引用计数有效并释放缓冲区中的数据
Windows专用 AllocSysString 由CString数据分配一个BSTR
SetSysString 使用CString对象中的数据来设置一个已存在的BSTR
LoadString 从一个Windows资源中加载一个已经存在的CString对象
AnsiToOem 实现由ANSI字符集到OEM字符集的对应转换
OemToAnsi 实现由OEM字符集到ANSI字符集的对应转换
其实最详细的资料是MSDN
MFC中如何吧CString类型转换为double或int型??
首先你要确定你的工程字符集用的是多字节而不是unicode才能用下面的方法, 因为vs2008/2010默认使用的是unicode编码. 修改方式为: 在解决方案窗口右键工程名-->属性->General项(我用的是英文的)-->字符集, 选择多字节那个就行了
CString str;
转成int: ;int a = atoi(str.GetBuffer());
转成double: double b = atof(str.GetBuffer());
// 如果你坚持要用unicode的话, 你就用下面两个函数:
转成int: ;int a = _wtoi(str.GetBuffer());
转成double: double b = _wtof(str.GetBuffer());
先(LPCTSTR)你的CString,然后atof或者atoi它,前提是你的CString必须是有效的double或者int。
char *s; double x; int i; long l;
s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );
这是msdn上关于ASCII的一个例子,相信可以帮助到你了吧
修改方式为: 在解决方案窗口右键工程名-->属性->General项(我用的是英文的)-->字符集, 选择多字节那个就行了。
1、转成int:int a = atoi(str.GetBuffer());
2、转成double:double b = atof(str.GetBuffer())。
CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。
mfc是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数,并且包含一个应用程序框架,以减少应用程序开发人员工作量。vc++是微软公司开发的c/c++的集成开发环境,所谓集成开发环境,就是说利用它你可以编辑,编译,调试,而不是使用多种工具轮换操作,灵活性较大。有时人们说vc呢也指它的内部编译器,集成开发环境必须有一个编译器内核,要不有什么用,例如DevC++其中一个编译器内核就是gcc。
MFC除了是一个类库以外,还是一个框架,你应该试过,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但是由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率但是MFC的封装很浅,所以效率上损失不大,灵活性还可以,虽然也有很多缺陷,但还是一个比较好的东西。
C++中如何把string转成CString?
举个简单的例子:string s="123"; char t[8];strcpy(t,s.c_str()); // s.c_str()就是转成C风格的字符串表示
这样。。
string str = "Hello World";
CString cstr = "";
cstr.Format("%s", str);
这样就可以了 使用CString的 Format函数 跟printf函数一样
如何从CString类型的字符串中取出数字
MessageBox(strGetDate);return 0;}其实就是使用了CString的几个函数 find,mid。下面是他们的具体解释CString Mid( int nFirst ) const;
CString Mid( int nFirst, int nCount ) const;
/*返回值: 返回一个包含指定范围字符的拷贝的CString对象。注意,这个返回的CString对象可能是空的。 参数: nFirst 此CString对象中的要被提取的子串的第一个字符的从零开始的索引。 nCount 要从此CString对象中提取的字符数。如果没有提供这个参数,则字符串的其余部分都被提取。 对于多字节字符集(MBCS),nCount指的是每8位字符的数目;也就是说,在一个多字节字符中开始和结尾字节被算作两个字符。 */?0?2int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( LPCTSTR lpszSub, int nStart ) const;// 返回此CString对象中与需要的子字符串或字符匹配的第一个字符的从零开始的索引;//如果没有找到子字符串或字符则返回-1/*参数含义:ch 要搜索的单个字符。 lpszSub 要搜索的子字符串。 nStart 字符串中开始搜索的字符的索引,如果是0,则是从头开始搜索。如果nStart不是0,则位于nStart处的字符不包括在搜索之内。 pstr 指向要搜索的字符串的指针*/在遇到这种问题时,字符串都是有一定的规律的,使用一定的算法,然后再结合CString的函数就可以解决这些问题,现在抛砖引玉,以后遇到一种情况在这改一次。