思路:


        将字符串添加到map容器中

        然后比较字符串名 获得该字符串所对应的索引值

        在Switch中使用这个索引值判断



       在stdafx.h 添加头文件

       #include <map>   //注 在CPP中直接添加头文件时 出现了错误 不知道什么原因造成的


  1. CString fontNameStr;  
  2.   
  3. std::map<int,CString> nameMap;  
  4.   
  5. nameMap.insert(std::make_pair(1,L"小篆"));  
  6. nameMap.insert(std::make_pair(2,L"宋体"));  
  7. nameMap.insert(std::make_pair(3,L"楷体"));  
  8.   
  9. fontNameStr=L"宋体";  
  10.   
  11.   
  12. int nIndex=0;  
  13.   
  14. std::map<int,CString>::iterator iter;  
  15.   
  16. for(iter=nameMap.begin();iter!=nameMap.end();iter++)  
  17. {  
  18.     if (iter->second.CompareNoCase(L"宋体")==0)  
  19.     {  
  20.         nIndex=iter->first;  
  21.         break;  
  22.     }  
  23.   
  24. }  
  25.   
  26.   
  27. switch(nIndex)  
  28. {  
  29. case 1:  
  30.     break;  
  31.   
  32. default:  
  33.     break;  
  34.   
  35. }  
<span style="font-size:18px;"><span style="font-size:18px;">	CString fontNameStr;

	std::map<int,CString> nameMap;

	nameMap.insert(std::make_pair(1,L"小篆"));
	nameMap.insert(std::make_pair(2,L"宋体"));
	nameMap.insert(std::make_pair(3,L"楷体"));

	fontNameStr=L"宋体";


	int nIndex=0;

	std::map<int,CString>::iterator iter;

	for(iter=nameMap.begin();iter!=nameMap.end();iter++)
	{
		if (iter->second.CompareNoCase(L"宋体")==0)
		{
			nIndex=iter->first;
			break;
		}

	}


	switch(nIndex)
	{
	case 1:
		break;

	default:
		break;

	}
</span></span>
 

      不过用容器做 有点画蛇添足 , 还不如使用下面方式简单明了


  1. CString fontNameStr;  
  2.   
  3. if(fontNameStr.CompareNoCase(L"小篆")==0)  nIndex=1;  
  4. if(fontNameStr.CompareNoCase(L"宋体")==0)  nIndex=2;  
  5. if(fontNameStr.CompareNoCase(L"楷体")==0)  nIndex=3;  
  6.   
  7. switch(nIndex)  
  8. {  
  9. case 1:  
  10.     break;  
  11.   
  12. case 2:  
  13.     break;  
  14. case 3:  
  15.     break;  
  16.   
  17. default:  
  18.     break;  
  19.   
  20. }  
<span style="font-size:18px;"><span style="font-size:18px;">	CString fontNameStr;

	if(fontNameStr.CompareNoCase(L"小篆")==0)  nIndex=1;
	if(fontNameStr.CompareNoCase(L"宋体")==0)  nIndex=2;
	if(fontNameStr.CompareNoCase(L"楷体")==0)  nIndex=3;

	switch(nIndex)
	{
	case 1:
		break;

	case 2:
		break;
	case 3:
		break;

	default:
		break;

	}
</span></span>


参考资料:

http://blog.csdn.net/litoyao/article/details/5591763

 

http://blog.csdn.net/shuilan0066/article/details/7947396

 

另一种用枚举的解决办法:http://blog.csdn.net/chanchaw/article/details/7584642

 

switch case

只支持整数和枚举类型

不支持其他数据类型

支持枚举类型的示例:

<span style="font-size:18px;">你是想从屏幕里输入一个字符,然后将这个字符转换为对应的枚举吧。如:从屏幕上输入'a',则转换为set枚举中对应的a,如果是这个意思,我已经帮你实现了,源代码如下(见注释,不明白的地方可以hi我): 

#include <iostream> 
using namespace std; 
enum set {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}; 
void char2enum(char ch , set &em){ 
// 实现字符转枚举,其中参数em为set的引用类型,来把ch转换的结果传出 
char start = 'a'; 
em = (set)((int)ch - (int)start); 
} 
void main() 
{ 
char str; 
set temp; 
cout << "please input a char: "; 
cin>>str; // 获取从屏幕中输入的字符 
char2enum(str, temp); // 将字符str转换为枚举temp 
switch(temp) // 根据枚举的值,进行输出 
{ 
case a: 
cout<<'a'<<endl;break; 
case b: 
cout<<'b'<<endl;break; 
case c: 
cout<<'c'<<endl;break; 
case d: 
cout<<'d'<<endl;break; 
case e: 
cout<<'e'<<endl;break; 
case f: 
cout<<'f'<<endl;break; 
// case g:... 你自己去添加这些代码吧 
// case h:... 
} 
} 

测试结果: 
please input a char: 
a 回车 
a // 为输出内容</span>

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐