string到枚举类c++
时间: 2023-10-22 17:06:14 浏览: 44
可以使用一个函数将字符串转换为枚举类变量。需要注意的是,这个函数需要判断输入的字符串是否合法,即是否是枚举类中定义的成员。以下是一个示例代码:
```
#include <iostream>
#include <string>
using namespace std;
enum class Color {
Red,
Blue,
Black
};
Color stringToColor(const string& str) {
if (str == "Red") {
return Color::Red;
} else if (str == "Blue") {
return Color::Blue;
} else if (str == "Black") {
return Color::Black;
} else {
throw invalid_argument("Invalid color string");
}
}
int main() {
string colorStr = "Blue";
Color color = stringToColor(colorStr);
cout << "color: " << static_cast<int>(color) << endl;
return 0;
}
```
相关问题
c++枚举类怎么定义成string类型
在C++11及以上的版本中,可以使用enum class来定义枚举类型,并且可以通过重载运算符来将枚举值转换成字符串类型。以下是一个示例代码:
```c++
#include <iostream>
#include <string>
enum class Color { RED, GREEN, BLUE };
std::string to_string(Color c) {
switch (c) {
case Color::RED:
return "RED";
case Color::GREEN:
return "GREEN";
case Color::BLUE:
return "BLUE";
default:
return "UNKNOWN";
}
}
int main() {
Color c = Color::RED;
std::cout << to_string(c) << std::endl; // 输出 "RED"
return 0;
}
```
在上面的代码中,我们定义了一个枚举类型Color,并且通过重载to_string函数来将枚举值转换成字符串类型。在main函数中,我们定义了一个Color类型的变量c,并且将其传入to_string函数中进行转换。最后输出的结果为"RED"。
从枚举类到std::string
可以使用以下方法将枚举类转换为std::string:
1. 使用一个函数或成员函数来执行转换:
```cpp
#include <string>
enum Color { RED, GREEN, BLUE };
std::string enumToString(Color color) {
switch (color) {
case RED: return "RED";
case GREEN: return "GREEN";
case BLUE: return "BLUE";
default: return "UNKNOWN";
}
}
int main() {
Color color = GREEN;
std::string str = enumToString(color);
return 0;
}
```
2. 使用C++11中的非成员特化方式:
```cpp
#include <string>
enum class Color { RED, GREEN, BLUE };
namespace std {
template<>
struct hash<Color> {
typedef Color argument_type;
typedef size_t result_type;
result_type operator()(const argument_type& color) const {
return static_cast<result_type>(color);
}
};
template<>
struct equal_to<Color> {
typedef Color first_argument_type;
typedef Color second_argument_type;
typedef bool result_type;
result_type operator()(const first_argument_type& lhs, const second_argument_type& rhs) const {
return lhs == rhs;
}
};
}
int main() {
Color color = Color::BLUE;
std::unordered_map<Color, std::string> colorMap;
colorMap[Color::RED] = "RED";
colorMap[Color::GREEN] = "GREEN";
colorMap[Color::BLUE] = "BLUE";
std::string str = colorMap[color];
return 0;
}
```