switch(字符串)
老师要我们做一个类似UNIX操作的程序,我想用switch来判断命令并执行:
switch(strCmd)
{
case "ls":ls(strPar);break;
case "mkdir":mkdir(strPar);break;
case "rmdir":rmdir(strPar);break;
default:help;
}
但是,switch expression of type 'std::string' is illegal.请问怎么做才能做到呢?不要说让我用if..else..嵌套……
问题点数:10、回复次数:7Top
1 楼steedhorse(晨星)回复于 2006-03-08 18:05:11 得分 2
这里,直接的方法只能是if/else if/.../else的方式。Top
2 楼sterrys(sterrys)回复于 2006-03-08 18:09:57 得分 1
switch(strCmd[0])
{
case 'l':ls(strPar);break;
case 'm':mkdir(strPar);break;
case 'r':rmdir(strPar);break;
default:help;
}
Top
3 楼zhmh326(川添拓海)回复于 2006-03-08 18:10:35 得分 0
那不直接呢?有没有更好的方法?高手帮忙啊Top
4 楼zhmh326(川添拓海)回复于 2006-03-08 18:17:30 得分 0
sterrys(sterrys) 的方法也不好啊,如果我只写一个个'l',它也执行ls了啊Top
5 楼zhmh326(川添拓海)回复于 2006-03-08 18:59:37 得分 0
高手帮忙啊,可以不用switch,但总不至于用那么一大堆的if else 吧,毕竟命令太多了Top
6 楼steedhorse(晨星)回复于 2006-03-08 19:10:32 得分 2
其实也没啥,偶觉得这种情况用if/else if/.../else的方式不管是从代码的可读性还是从程序的效率考虑都没啥问题。
if(strcmd == "ls") {
//......
} else if (strcmd == "mkdir") {
//......
} else if (strcmd == "rmdir") {
//......
} else {
//......
}
但如果需要判断的命令很多,那就自己构造hash表好了,可以使用STL的std::map,命令字符串做key,函数指针或functor对象做value。Top
7 楼rabbit729(无名胜有名)回复于 2006-03-08 19:22:07 得分 5
通过枚举来实现,
enum {ls,mkdir,rmdir,...,mount};
int command;
cout<<"Enter your command: \n";
cin>>command;
while(command>=ls && command<=mount)
{
switch(command)
{
case ls:ls(strPar);break;
case mkdir:mkdir(strPar);break;
case rmdir:rmdir(strPar);break;
.....
case mount:mount(strPar):break;
default:help;
}
cout<<"Enter your command: \n";
cin>>command;
}
不过这种方法必须事先确定命令的个数,不过这好像有点困难,只能找最常用的了。希望有更好的方法。Top




