dcsimg
 

Using Strings with a Switch

Thursday Aug 8th 2002 by Swikar Sugandhi

Articles gives simple macros to achieve switch-case on strings. The same philosophy can be extended for switch-case on variables.

Environment:

The following macros help to achieve the switch-case on a string.

//////////////////////////////////////////////////////////////
#define STR_SWITCH(str)  {\
        TCHAR* __ps = (TCHAR*)((const TCHAR*)str);\
        while(1) {

#define STR_SWITCH_END()  break; } }

#define STR_CASE(str) if(0 == _tcsicmp(__ps,((const TCHAR*)str)))

#define STR_CASE_EXACT(str)  if( 0 == _tcscmp( __ps, 
                               ((const TCHAR*)str) ) )

#define DEFAULT_CASE()

//////////////////////////////////////////////////////////////

How do you use these macros? Go through the following piece of code.

Myclass::Function()
{
  CString sSwitch("bbbb");
  CString sCase("AAAA");

  STR_SWITCH(sSwitch)      //Start of switch
  {                        //Opening and closing braces
                           //NOT MANDATORY for switch.
  STR_CASE(sCase)
    {                      //Opening and closing braces
                           //MANDATORY for case.
      AfxMessageBox("In first case statement");
      break;               //break has to in braces of case
    }                      //Opening and closing braces
                           //MANDATORY for case.

  break;                   //Illegal break -- The code works,
                           //but the output....?????

  sCase = _T("bbbb");      //Statements allowed here ;)

  STR_CASE_EXACT(sCase)
    {
      AfxMessageBox("In second case statement");
      break;
    }
  DEFAULT_CASE()
    {
                           //Default handling if any
      break;
    }
  }                        //Opening and closing braces
                           //NOT MANDATORY for switch
  STR_SWITCH_END()         //MANDATORY statement
}

STR_CASE() -> Perform a lowercase comparison of strings.
STR_CASE_EXACT() -> Compares strings, matches the
                     case of the characters.
DEFAULT_CASE() -> Default case for the switch.

Note the following requirements:

  1. The "break" statement has to be inside the scope for the STR_CASE, STR_CASE_EXACT, or DEFAULT_CASE.
  2. Fall through for case statements is not allowed with this switch case.
  3. Statements between two cases are allowed. Be careful while modifying the string on which the switch is performed.
Home
Mobile Site | Full Site
Copyright 2018 © QuinStreet Inc. All Rights Reserved