CString
- 格式:doc
- 大小:274.00 KB
- 文档页数:22
一.VC常用数据类型列表二.常用数据类型转化2.1数学类型变量与字符串相互转换_ttoi(CString->int) _tstof(CString->double)2.2CString及string,char *与其他数据类型的转换和操作●CString,string,char*的综合比较●数学类型与CString相互转化●CString与char*相互转换举例●CString 与 BSTR 型转换●VARIANT 型转化成 CString 型2.3 BSTR、_bstr_t与CComBSTR2.4 VARIANT 、_variant_t 与 COleVariant附录CString及字符串转及操作详解参考书籍:CSDN,<<MFC深入浅出(Second Edit)>> 一.VC常用数据类型列表int iTyep=3;char *szChar;itoa(iType,szChar,2);cout<<szChar;//输出为1010类似函数列表:_CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中_CRTIMP char * __cdecl _ultoa(unsigned long, char *, int);_CRTIMP char * __cdecl _ltoa(long, char *, int);_CRTIMP char * __cdecl _i64toa(__int64, char *, int);_CRTIMP char * __cdecl _ui64toa(unsigned __int6 4, char *, int);_CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int);_CRTIMP wchar_t * __cdecl _itow (int, wc har_t *, int);//转换为长字符串类型_CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);_CR TIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int);还有很多,请自行研究(2)将字符串类型转换为数学类型变量可以用以下一些函数:举例: _CRTIMP int __cdecl atoi(co nst char *);//参数一看就很明了char *szChar=”88”;int temp(0);temp=atoi(szChar); cout<<temp;类似的函数列表:_CRTIMP int __cdecl atoi(const char *);_CRTIMP double __cd ecl atof(const char *);_CRTIMP long __cdecl atol(const char *);_CRTIMP long double __cdecl _atold(const char *);_CRTIMP __int64 __cdecl _atoi64(const char *);_CRTIMP double __cdecl s trtod(const char *, char **);//_CRTIMP long __cdecl strtol(const char *, char **, int);//_ CRTIMP long double __cdecl _strtold(const char *, char **);_CRTIMP unsigned long __cdecl str toul(const char *, char **, int);_CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **); //长字符串类型转换为数学类型_CRTIMP long __cdecl wcstol(const wchar_t *, wchar_t **, int); _CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int);_CRTIMP int __cdecl _wtoi(const wchar_t *);_CRTIMP long __cdecl _wtol(const wchar_t *);_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *);还有很多,请自行研究2.2.CString及string,char *与其他数据类型的转换和操作(1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章<< CString,string,char*的综合比较>>写的很详细,请大家在仔细阅读他的文章.地址: /joise/或参考附录:(2)转换:●数学类型与CString相互转化数学类型转化为CString可用Format函数,举例:CString s;int i = 64;s.Format("%d", i)CString转换为数学类型:举例CString strValue("1.234");double dblValue;dblValue = atof((LPCTSTR)strValue);●CString与char*相互转换举例CString strValue(“Hello”);char *szValue;szValue=strValue.GetBuffer(szValue);也可用(LPSTR)(LPCTSTR)对CString// 进行强制转换.szValue=(LPSTR)(LPCTSTR)strValue;反过来可直接赋值:char *szChar=NULL;CString strValue;szChar=new char[10];memset(szChar,0,10);strcpy(szChar,”Hello”);strValue=szChar;●CString 与 BSTR 型转换CString 型转化成 BSTR 型当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成 BSTR 类型.B STR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的 NULL 字符。
CString的成员函数详解typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString;CString的构造函数:1 CString( );2 CString( const CString& stringSrc );3 CString( TCHAR ch, int nRepeat = 1 );4 CString( LPCTSTR lpch, int nLength );5 CString( const unsigned char* psz );6 CString( LPCWSTR lpsz );7 CString( LPCSTR lpsz );CString 成员函数详解:1.CString 的构造函数:// 缺省构造函数CString()例:CString csStr;// 复制构造函数CString(const CString& stringSrc)例:CString csStr("ABCDEF 中⽂ 123456");CString csStr2(csStr);// ⽤字符初始化CString(TCHAR ch, int nRepeat = 1)例:CString csStr('a', 5); // csStr = "aaaaa"// ⽤字符串前⼏个字符初始化CString(LPCTSTR lpch, int nLength)例:CString csStr("abcdef", 3); // csStr = "abc"// ⽤宽字符串初始化CString(LPCWSTR lpsz)例:wchar_t s[] = L"abcdef";CString csStr(s); // csStr = L"abcdef"// ⽤字符串初始化CString(LPCSTR lpsz)例:CString csStr("abcdef"); // csStr = "abcdef"// ⽤字符串初始化CString(const unsigned char * psz)例:const unsigned char s[] = "abcdef";const unsigned char *sp = s;CString csStr(sp); // csStr = "abcdef"2.CString 的成员函数:int GetLength( ) const;返回字符串的长度,不包含结尾的空字符。
cstring字符串分割处理
字符串的分割处理可以使用以下方法:
1. 使用split()函数:split()函数可以将字符串按照指定的分隔符进行分割,并返回一个包含分割后子字符串的列表。
例如:
```python
s = "Hello, World!"
result = s.split(",") # 使用逗号作为分隔符进行分割
print(result) # 输出 ['Hello', ' World!']
```
2. 使用正则表达式:使用re模块可以根据正则表达式对字符串进行分割。
例如:
```python
import re
s = "Hello, World!"
result = re.split(",\s*", s) # 使用逗号和0个或多个空格作为分隔符进行分割
print(result) # 输出 ['Hello', 'World!']
```
3. 使用字符串的切片功能:根据字符串的特定位置进行分割操作。
例如:
```python
s = "Hello, World!"
result = [s[:5], s[7:]] # 在索引位置5和7处进行分割print(result) # 输出 ['Hello', 'World!']
```
请根据具体的分割要求选择适合的方法进行处理。
需要强制类型转化时,C++规则容许这种选择。
比如,你可以将(浮点数)定义为将某个复数(有一对浮点数)进行强制类型转换后只返回该复数的第一个浮点数(也就是其实部)。
可以象下面这样:Complex c(1.2f,4.8f);float realpart=c;如果(float)操作符定义正确的话,那么实部的的值应该是1.2。
这种强制转化适合所有这种情况,例如,任何带有LPCTSTR类型参数的函数都会强制执行这种转换。
于是,你可能有这样一个函数(也许在某个你买来的DLL中):BOOL DoSomethingCool(LPCTSTR s);你象下面这样调用它:CString file("c:¥¥myfiles¥¥coolstuff")BOOL result=DoSomethingCool(file);它能正确运行。
因为DoSomethingCool函数已经说明了需要一个LPCTSTR类型的参数,因此LPCTSTR被应用于该参数,在MFC 中就是返回的串地址。
如果你要格式化字符串怎么办呢?CString graycat("GrayCat");CString s;s.Format("Mew!I love%s",graycat);注意由于在可变参数列表中的值(在函数说明中是以"..."表示的)并没有隐含一个强制类型转换操作符。
你会得到什么结果呢?一个令人惊讶的结果,我们得到的实际结果串是:"Mew!I love GrayCat"。
因为MFC的设计者们在设计CString数据类型时非常小心,CString类型表达式求值后指向了字符串,所以这里看不到任何象Format或sprintf中的强制类型转换,你仍然可以得到正确的行为。
描述CString的附加数据实际上在CString名义地址之后。
C头⽂件之cstring
(string.h)
这个⽂件夹主要是定义了⼏个对字符串和数组进⾏操作的函数。
功能很强⼤。
下⾯是重要函数:
strcpy、strncpy
strcpy,strncpy
这两个函数是对字符串的复制,很常⽤。
memcpy
函数原型:void * memcpy ( void * destination, const void * source, size_t num );。
主要⽤于数组指定的内存之间的复制,⽽不是字符串之间。
将source指定的内存前num个字节复制到destination指定的内存的千numge字节。
memset
函数原型:void * memset ( void * ptr, int value, size_t num );主要⽤于数组的初始化。
将ptr指定的内存的前num个字节初始化为value。
可以⽤于数组初始化,不⽤遍历数组赋值了。
/* memset example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] = "almost every programmer should know memset!";
memset (str,'-',sizeof(str));
puts (str);
return0;
}
/*OutPut*/
----------------------------------------------------------。
cstring头文件例题摘要:一、CString头文件简介1.CString的定义2.CString与字符串的关系3.CString头文件的包含二、CString常用函数1.CString的构造函数2.CString的拷贝构造函数3.CString的赋值函数4.CString的连接函数5.CString的查找函数6.CString的替换函数7.CString的比较函数8.CString的长度函数9.CString的访问与修改三、CString应用实例1.CString的简单应用2.CString的复杂应用正文:CString头文件是C++编程中经常使用的一个头文件,它提供了C++中字符串的操作功能。
CString是C++中的一种字符串类型,它与C语言中的字符串有所不同,CString可以动态地分配和释放内存,同时可以对字符串进行操作。
一、CString头文件简介CString的定义在CString头文件中,它是一种模板类,定义如下:```cpptemplate <class T>class CString {public:CString();CString(const T* psz);CString(const CString& str);~CString();CString& operator=(const CString& str);CString& operator=(const T* psz);int GetLength() const;void Release();void Attach(const T* psz);const T* GetBuffer() const;T* GetBuffer(size_t nLength);private:T* m_pch;int m_nLength;int m_nMaxLength;};```CString与字符串的关系是CString是字符串的一种实现方式,它可以动态地分配和释放内存,同时可以对字符串进行操作。
Cstring和string的区别和联系相同点:(1)用他们都可以取代对char*的使用。
(2)都封装了有丰富的字符串操作接口。
(3)他们都是C++的类库。
--以string的使用为例,不能有如下用法:string * pstr = NULL; //定义一个指向字符串的指针pstr->append("Hello world."); //在该字符串的末尾粘接上另一个字符。
这样做编译器不会有任何警告和错误,但是运行的时候就会有异常。
原因是没有理解string是一个类,而在定义类的对象的时候是需要调用其构造函数的。
上面既没有调用string的构造函数,而且还把指针赋值为NULL,很明显调用该类的对象的接口的时候会出错。
但是编译器却发现不了这个问题的。
正确的方法是如下:/*这里必须要用c++的宏new,而不能用c中的malloc,原因是new不但会分配一块内存,*//*还执行了类的构造函数。
当然,string类的实例化还可以通过已有的某个string对象进行,请另查阅*/string * pstr = new string("Hello world.");pstr->append("Hello world.");cout<<"string * pstr is:"<<*pstr<<endl;或者不用指针,如下也可以:string str; //会自动调用默认的构造函数,构造一个string类的对象。
str.apend("Hello world.");cout<<"string str is:"<<str<<endl;(4)他们都使用了模板的技术。
不同之处:(1)CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。
CString类的原理与使用先定义几个以后会用到的变量:CString str1, str2, str3;概括说明:MFC对CString类的封装可能的确不如std::string完善,但是也的确不错,功能也足够强大,使用上还很体贴。
其基本特征为:CString类没有基类。
CString类和LPCTSTR的关系:MSDN上说“CString objects follow "value semantics." Think of a CString object as an actual string, not as a pointer to a string.”也就是说用的时候除了考虑使用它的成员函数的方式,就把它当作普通的c-style字符串来使用就行了。
你可以在构造函数中使用LPCTSTR:CString str("Hello World!");可以:str1 = str2; 或者 str1 = “Hello”;也可以:str3 = str1 + str2; 或者 str3 = str1 + “Hello”;当然也可以:str1 += str2; 或者 str1 += “Hello”;实际上下列的这些操作符都可以用在CString对象之间或者CString和LPCTSTR对象之间:==、!=、<、>、<=、>=自然,将CString对象强制转换到LPCTSTR类型也就应该在情理之中:LPCTSTR string = (LPCTSTR) str1;CString支持UNICODE和多字节字符集(MBCS)。
因为其本身是基于TCHAR的——当然你不要忘了定义编码方式,如:#define _UNICODE。
CString支持引用计数。
可以通过其成员函数LockBuffe/和UnLockBuffer来禁用/启用引用计数。
对于CString类的成员函数的定义、说明、返回值等形式在此并不赘述,如有此疑问请参阅:中的相关链接。
CString类一、常用成员函数1.int GetLength()const;说明:获取CString类对象包含字符串的长度(字符数)。
2.BOOL IsEmpty()const;说明:测试CString类对象包含的字符串是否为空。
3.void Empty();说明:使CString类对象包含的字符串为空字符串。
4.TCHAR GetAt(int nIndex )const;说明:获得字符串指定位置处的字符。
5.TCHAR operator [](int nIndex )const;说明:获得字符串指定位置处的字符,作用和GetAt()一样。
6.void SetAt(int nIndex, TCHAR ch );说明:设定字符串指定位置处的字符。
7.operator LPCTSTR ()const;说明:返回指向储存在CString类对象内的字符串指针。
8.MidMid函数有两个重载函数:CString Mid(int nFirst )const; throw(CMemoryException );获取从nFirst位置开始的子串。
CString Mid(int nFirst, int nCount )const; throw(CMemoryException );获取从nFirst位置开始包含nCount个字符的子串。
9.CString Left(int nCount )const;throw(CMemoryException );说明:获取字符串左边nCount长度的字符串。
10.CString Right(int nCount )const; throw(CMemoryException );说明:获取字符串右边nCount长度的字符串。
11.CString SpanIncluding(LPCTSTR lpszCharSet )const;throw (CMemoryException );说明:从字符串中提取包含在指定字符集lpszCharSet中的字符的子串。
CStringCString没有基类。
一个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。
更多的信息,参见“Visual C++程序员指南”中的“MFC字符串”和“字符串:Unicode和多字节字符集(MBCS)支持”,以及“Microsoft Visual C++库参考”中的“Microsoft Visual C++ 6.0运行库参考”。
#include <afx.h>请参阅:在“Visual C++ 程序员指南”中的:字符串:基本的CString操作,字符串:CString语义,字符串:CString与C字符串相关的操作,字符串:CString异常清除,字符串:CString参数传递CString类成员构造字符串数组分配/串联比较提取其他转换搜索归档/存储缓冲区访问Windows专用CString::CStringCString( );CString( const CString& stringSrc ); throw( CMemoryException );CString( TCHAR ch, int nRepeat = 1 ); throw( CMemoryException );CString( LPCTSTR lpch, int nLength ); throw( CMemoryException );CString( const unsigned char* psz ); throw( CMemoryException );CString( LPCWSTR lpsz ); throw( CMemoryException );CString( LPCSTR lpsz ); throw( CMemoryException );参数:stringSrc 一个已经存在的CString对象,它要被拷贝到此CString对象中。
ch 要被重复nRepeat次的单个字符。
nRepeat 要对ch重复的次数。
lpch 一个指向字符数组的指针,该字符数组的长度是nLength,不包括结尾的空字符。
nLength pch中的字符的个数。
psz 一个要被拷贝到此CString对象中去的以空字符结尾的字符串。
lpsz 一个要被拷贝到此CString对象中去的以空字符结尾的字符串。
说明:这些构造函数的每一个都用来以指定的数据初始化一个新的CString对象。
由于构造函数是将输入数据拷贝到新分配的存储区,所以你应该注意可能会导致的内存异常。
注意,这些构造函数中的某些函数的作用相当于一个转换函数。
这就允许你使用替换物,例如在一个需要CString对象的地方用一个LPTSTR 来代替。
此构造函数的某几种形式具有特殊的目的:·CString( LPCSTR lpsz ) 从一个ANSI字符串构造一个Unicode CString。
你可以象下面的例子那样用这个函数来加载一个字符串资源。
·CString( LPCWSTR lpsz ) 从一个Unicode字符串构造一个CString。
·CString( const unsigned char* psz ) 从一个指向unsigned char的指针构造一个CString。
想了解更多的信息,请参阅“Visual C++ 程序员指南”随机文中的“String:CString Exception Cleanup ”一节。
示例:下面的例子说明了如何使用String::CString。
// CString::CString示例:CString s1; // 空字符串CString s2( "cat" ); // 从一个文字的C字符串CString s3 = s2; // 拷贝构造函数CString s4( s2 + " " + s3 ); // 从一个字符串表达式CString s5( 'x' ); // s5 = "x"CString s6( 'x', 6 ); // s6 = "xxxxxx"CString s7((LPCSTR)ID_FILE_NEW); // s7 = "Create a new document"CString city = "Philadelphia"; // 不是赋值操作符请参阅:CString::operator =CString::GetLengthint GetLength( ) const;返回值:返回字符串中的字节计数。
说明:此成员函数用来获取这个CString对象中的字节计数。
这个计数不包括结尾的空字符。
对于多字节字符集(MBCS),GetLength按每一个8位字符计数;即,在一个多字节字符中的开始和结尾字节被算作两个字节。
示例:下面的例子说明了如何使用CString::GetLength。
// CString::GetLength示例:CString s( "abcdef" );ASSERT( s.GetLength() == 6 );请参阅:CString::IsEmptyCString::IsEmptyBOOL IsEmpty( ) const;返回值:如果CString对象的长度为0,则返回非零值;否则返回0。
说明:此成员函数用来测试一个CString对象是否是空的。
示例:下面的例子说明了如何使用CString::IsEmpty。
// CString::IsEmpty示例:CString s;ASSERT( s.IsEmpty() );请参阅:CString::GetLengthCString::Emptyvoid Empty( );说明:此成员函数用来使CString对象成为一个空字符串,并释放相应的内存。
更多的信息,参见“Visual C++程序员指南”中的“字符串:CString异常清除”。
示例:下面的例子说明了如何使用CString::Empty。
// CString::Empty示例:CString s( "abc" );s.Empty();ASSERT( s.GetLength( ) == 0 );请参阅:CString::IsEmptyCString::GetAtTCHAR GetAt( int nIndex ) const;返回值:返回一个包含字符串中的指定位置的字符串的TCHAR。
参数:nIndex C String对象中的某个字符的从零开始的索引。
nIndex参数必须大于或等于0,并小于GetLength函数的返回值。
Microsoft基础类库的测试版验证nIndex的边界;但是发行版不验证。
说明:你可以把一个CString对象看作是一个字符数组。
GetAt成员函数返回一个由一个索引号指定的单个字符。
重载的下标([])是GetAt常用的代用符。
示例:下面的例子说明了如何使用CString::GetAt。
// CString::GetAt示例:CString s( "abcdef" );ASSERT( s.GetAt(2) == 'c' );请参阅:CString::GetAt, CString::GetLength, CString::operator []CString::operator []TCHAR operator []( int nIndex ) const;参数:nIndex 字符串中的一个字符的从零开始的索引。
说明:你可以将一个CString对象看作是一个字符数组。
此重载下标操作符([])返回由nIndex中的从零开始的索引值指定的一个字符。
此操作符是GetAt成员函数的惯用的代用符。
示例:下面的例子说明了如何使用CString::operator []操作符。
// CString::operator []示例:CString s( "abc" );ASSERT( s[1] == 'b' );请参阅:CString::GetAt, CString::SetAtCString::SetAtvoid SetAt( int nIndex, TCHAR ch );参数:nIndexCString 对象中的某个字符的从零开始的索引。