Simple String Class | CodeGuru

Simple String Class

Environment: VC6, NT4 SP5, Windows 95b/98 Background Although both MFC and STL provide the CString and the string class to manipulate strings, In my recent project I have to develop a simple string class for my particular use. The future includes formatting string, similar to MFC format; searching string with the given wildcards; and numeric […]

Written By
CodeGuru Staff
CodeGuru Staff
Jul 26, 2000
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6, NT4 SP5, Windows 95b/98

Background

Although both MFC and STL provide the CString and the string class to manipulate strings,
In my recent project I have to develop a simple string class for my particular use. The
future includes formatting string, similar to MFC format; searching string with the given
wildcards; and numeric conversion with the desired data type.

Class Definition

class CStr
{
public:
 // constructors and destructor
 CStr(const CStr& str);
 CStr(const char* str);
 CStr(const double var)
  { VarToString(var); }

 CStr()
  { m_nLength = 0; m_pString = 0; }

 virtual ~CStr()
  { if (m_pString) delete m_pString; }

 // operator overloading helper
 template <class T> friend CStr _cdecl operator +(T var, const CStr& str);

 // operator overloading
 CStr& operator  =(const char* str);
 CStr& operator  =(const CStr& str);

 CStr& operator  =(const double var)
 { VarToString(var); return *this; }

 template<class T>
 CStr  operator  +(T var)
 { CStr tstr = *this; return tstr += var; }

 CStr& operator +=(double str)
 { return *this += (CStr)str; }

 CStr& operator +=(const char* str)
 { return *this += (CStr)str; }

 CStr& operator +=(const CStr& str);

 // add more logic comparison operators as following,
 // for example, although not efficient
 virtual bool operator !=(char* str)
  { return strcmp(str, m_pString) != 0; }

 // c type string conversion
 operator char* ()
  { return m_pString; }

 operator const char* () const
  { return m_pString; }

 char* GetChar()
  { return m_pString; }

 // numeric conversion
 template <class T> GetValue(T& var)
  { return GetVar(var); }

 // search the match string : 
 // WildCards can be '?' and '*' combination
 // return value : true (pattern matchs string), false (no match)
 bool Search(const char* WildCards)
  { return Match((char*)WildCards, m_pString); }

 // format string
 int Format(const char* format, ...);

protected:
 // can use faster algorithm for search ?
 virtual bool Match(char*, char*);

 virtual bool Scan(char*&, char*&);

 // have any good conversion method ?
 virtual void VarToString(const double var);

 // numeric conversion helpers
 bool NumericParse(void* pvar, char flag);

 bool GetVar(bool& var)
  { return NumericParse((void*)&var, 'b'); }

 bool GetVar(char& var)
  { return NumericParse((void*)&var, 'c'); }

 bool GetVar(short& var)
  { return NumericParse((void*)&var, 's'); }

 bool GetVar(int& var)
  { return NumericParse((void*)&var, 'i'); }

 bool GetVar(long& var)
  { return NumericParse((void*)&var, 'l'); }

 bool GetVar(float& var)
  { return NumericParse((void*)&var, 'f'); }

 bool GetVar(double& var)
  { return NumericParse((void*)&var, 'd'); }

 bool GetVar(unsigned char& var)
  { return NumericParse((void*)&var, 'C'); }

 bool GetVar(unsigned short& var)
  { return NumericParse((void*)&var, 'S'); }

 bool GetVar(unsigned int& var)
  { return NumericParse((void*)&var, 'I'); }

 bool GetVar(unsigned long& var)
  { return NumericParse((void*)&var, 'L'); }


// data block
 int   m_nLength;
 char* m_pString;
};

template <class T>
CStr operator +(T var, const CStr& str)
{
 CStr svar = var;
 return svar += str;
}
Advertisement

Source Code

The implemented file Str.cpp is independent on MFC and STL string class. Hope this simple
string class can be used in most platform. Note that some UNIX C++ compilers do not
support snprintf.

Demo Project

StrDemo.cpp demonstrates how to use string numeric conversion, format, and search. Note that
the numeric type plus CStr is legal, such as 6.456 + (CStr)"hyt" will produce "6.456hyt" and
(CStr)"hyt" + ‘1’ will produce "hyt49". If you do not like that, please modify binary operator
CStr operator +(T var, const CStr& str) and corresponding member functions.

Downloads

Download demo project – 6 Kb

Download source – 3 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.