CString is a boon to all C++ converts of MFC. Good God! it is so
much of a pain to use char* in c++. A small mistake could lead
to big mishaps, to any programmer's nightmare. CString in MFC
gives lot many features to handle strings, weaning away
all such bad memories of char *. This article deals with the
usage of CString in MFC programs. It also tries to give some
small code snippets wherever necessary.
CString
Features:
There are some special features in CString that makes it really unique
and attractive. Some of them are
-
CString has no base classes in MFC. So it is light weight.
-
CString is written based on TCHAR type. It can
automatically support UNICODE as well as ASCII strings.
-
CString implements a reference counting mechanism for copy
of objects. This saves a lot of memory usage.
How to
Use CString:
CString can be initialized by calling one of its constructors.
It can be instantiated with or without parameters. The
constructors can
accept a char, char*, TCHAR, wchar types as a parameter. The
string is constructed according to the parameter passed.
In case it is created without any parameters, the string will
be empty. Values can be assigned with the use of '='
operator.
CString strExample;
strExample = "CString sample value";
To get the length of a CString, the function
CString.GetLength() can be used. This returns the length of
the string as an integer.
String
Concatenation with a CString:
String concatenation is very easy with CString. CString has an
overloaded operator for + sign, which makes a programmer's
life easier.
CString strExample1 = "Sample Value ";
CString strExample2 = "for concat with CString";
//Concatenation with CString and CString
strExample1 = strExample1 + strExample2;
//Concatenation with CString and a const char*
strExample1 = strExample1 + "for concat without CString";
CString
and BSTR:
CString also provides for conversions to BSTR with functions
like AllocSysString and SetSysString. It can allocate memory
and copy the data into the allocated space for BSTR.
CString strBstrConv = "Sample for CString to BSTR";
BSTR bstrVariable = strBstrConv.AllocSysString();
String
Comparisons with CString:
CString contains an operator member function for the '='
operator. This operator performs a case-sensitive comparison.
For case-insensitive comparisons the function CompareNoCase
can be used.
CString strCompareString1 = "String Compare Sample";
CString strCompareString2 = "sTring Compare Sample";
//Using == operator case sensitive CString comparison
if(strCompareString1 == strCompareString2)
MessageBox("Both Strings are equal - Case Sensitive");
//Using CompareNoCase for case-insensitive CString
comparison
if(strCompareString1.ComparNoCase(strCompareString2) == 0)
MessageBox("Both Strings are equal - Case Insensitive");
Finding
a Character inside CString:
CString supports find for a single character and also strings.
It provides searching a character from the reverse direction.
CString strFindData = "Finding a Character
and a string in forward
direction";
//Find
a char 'C'
int lPos = strFindData.Find('C');
//Find
"string"
int lPos = strFindData.Find('string');
These
find functions return the position of the character or
string as an integer.
Using
Format Functions in CString:
The Format function in CString can be used to convert
different data types into a string type. This function is
similar to the sprintf function.
CString strFormatData;
int x = 40;
char strdata[] = "Test Data ";
strFormatData.Format("%s %d",x,strdata);
//The
output will be "Test Data 40"
The above is only a small list of the capabilities of CString.
There are a lot more of features available with CString. Not
all of them can be explained. More of those features will
become clear when one starts using it.