You are here:   MFC > MFC Tutorials > CString
Register   |  Login

 

   Minimize

CString

   Minimize

  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.