读书人

请问怎样将字符串转成枚举的一个值

发布时间: 2013-10-30 12:56:22 作者: rapoo

请教,怎样将字符串转成枚举的一个值?
enum colour{red=0,yellow=1,blue=2,white=3,black=4};
enum colour i,j,k,pri;

int main(int argc,char* argv[])
{
pri=red;
switch(pri){
case red : printf("asfasdfsd"); break;
default : printf("xxxxxxx");
}

我想读取一个文本字符串,值是 RED,BLUE之类的,使得pri的值等于RED,BLUE
等,那就可以在SWITCH里使用字符串了
谢谢

[解决办法]
自己写个转换函数就可以了啊
例如
colour Convert(const string& str)
{
if(str == “”)
return XX

}
[解决办法]
额外条件判断后,满足再赋值!
[解决办法]
Java这类的语主支持字符串的switch, 但是c/c++中就只能是字符串比较了, 或者使用map吧, 把串作key.

map<string,enumType>
[解决办法]
编译之后,只有二进制值,exe程序是不懂得有个叫枚举的东西
[解决办法]
map

if else
[解决办法]

引用:
Quote: 引用:

map

if else

谢谢,map是啥啊?
就是要这样的效果
switch(aaa)
{
case ABC : v = 100; break;
case 12 : v = 150; break;
default : v = -1;
}

是说标准库的那个map,建一个从字符串到enum类型的映射。
如果enum值不多,你还是ifelse好了
[解决办法]
序列化与反序列化


enum colour{red=0,yellow=1,blue=2,white=3,black=4};

std::istringstream& operator >> (std::istringstream& iss, colour & c);
std::ostringstream& operator >> (std::ostringstream& oss, colour c);

template <typename T>
T fromString(std::string const& s)
{
std::istringstream is(s);
T t;
iss >> t;
return t;
}

template <typename T>
std::string toString(T const& t)
{
std::ostringstream os;
oss << t;
return oss.str();
}




[解决办法]


enum colour{red=0,yellow=1,blue=2,white=3,black=4};

std::istringstream& operator >> (std::istringstream& iss, colour & c);
std::ostringstream& operator << (std::ostringstream& oss, colour c);
template <typename T>
T fromString(std::string const& s)
{
std::istringstream is(s);
T t;
iss >> t;
return t;
}

template <typename T>
std::string toString(T const& t)
{
std::ostringstream os;
oss << t;
return oss.str();
}



读书人网 >C++

热点推荐