`
cx732cx
  • 浏览: 19092 次
社区版块
存档分类
最新评论

(转载)C++中枚举与字符串相互转换

 
阅读更多

  有的时候我们喜欢使用一些外部的文件保存管理一些配置信息,这些配置文件大多都是文本格式例如ini,xml等,这样方便编辑和管理。因此在使用的过程中必然会遇到各种字符串转换问题。
  最常见的便是将字符串的数字转换为对应的整形(integer)或者浮点(float),如果遇到枚举类型,可能便会想当做是整形来处理,但觉得不是特别理想。如果能有办法直接转换为枚举会方便很多。 一个简单的配置文件: 在C++里面有枚举: 如果对于前面两个数值,可以很简单的读取,例如: 对于后面那个枚举,可能就稍微麻烦一点: 如果直接在配置文件里面不保存"cpp"字符串而直接保存枚举值,这里便可以当整形取出来再做类型转换。不过这样不安全,也不好维护,如果枚举内部的定义发生了变化,外部保存的数据自然也就会失效出错。 C++没有(也不可能会有)反射机制,枚举成员在编译以后也已经变成了纯粹的数值,失去了名字。所以想使用字符串作为搜索依据,必须为枚举保留一份名字信息,例如: 这个字符串数组只能预先写好,无论是手动还是通过工具自动生成。然后可以在这个字符串数组里面搜索目标字符串,将找到的结果下标转换为对应的枚举值即可,例如: 解决方案找到了,随之而来的问题就是如何将枚举与所需要的字符串查找表联系起来。如有多个枚举: 枚举不像类或结构体可以定义自己的成员变量,所以查找表只能在外部定义,通过实例化模板类来将他们相互联系起来。例如: 这定义了一个查找表的模板结构体,然后将之前的代码改造为: 然后便可以实现字符串转枚举的功能: 这样一来,最开始的问题就可以简化为: 有了这种方式,自然枚举反转回字符串也很容易了,就不再赘述了。 转载出处:  http://a.vifix.us/blog/cpp-convert-string-enum
分享到:
评论

相关推荐

    enum_strings:c ++ enum可转换为和从字符串

    枚举字符串C++ 枚举可与字符串相互转换。 源代码是从几个来源收集的,并稍作修改。 代码中引用了原始来源。例子# include " enum_conversions_macro.h "ENUM_CLASS (Day, Monday, Tuesday, Wednesday, Thursday, ...

    C++检测字符串合法性的类(自创)

    同时允许把字符串转换成相应的数据类型, 可用于对用户输入字符串的检验和转换等。 该类允许指定检测哪些内容,如是否超过给定最大值、是否越界等等, 仅用字符串操作来检测,而不是用正则表达式,不过效率蛮高的。 ...

    字符串转换成枚举类型的方法

    但在某些场景下,如处理从外部源接收的数据,如服务器传递的字符串,我们可能需要将字符串转换为枚举。以下是如何实现这一目标的方法。 首先,我们要明确枚举的基本定义。在C#中,枚举定义如下: ```csharp public...

    C++编写的字符串源代码

    可能还包括了对C风格字符串(`char*`)与自定义字符串类之间的转换函数。 4. **main.cpp**:这是程序的主入口文件,通常会包含一些测试用例,用来验证自定义字符串类的功能是否正确。这些测试用例可能包括创建字符...

    boost之lexical_cast之字符串转换成数值.rar_Boost_boost_字符串转换成数值

    在C++编程中,有时我们需要将字符串转换为数值类型,如整型、浮点型等,反之亦然。Boost库提供了一个非常实用的工具——`lexical_cast`,它简化了这个过程,使得转换更加安全和方便。本篇将详细介绍Boost库中的`...

    详解C++11强类型枚举

    (2)转换限制,强类型枚举成员的值不可以与整型发生隐式相互转换。 (3)可以指定底层类型。强类型枚举默认的底层类型是int,但也可以显示地指定底层类型。 例如: enum class Type:char{Low,Middle,High}; ...

    C_中字符串常用的处理方法

    `ToLower()`和`ToUpper()`方法分别用于将字符串转换为小写和大写。 ```csharp myString = myString.ToLower(); // All characters converted to lowercase myString = myString.ToUpper(); // All characters ...

    magic_enum:现代C ++的枚举(从字符串到字符串,从迭代到迭代)的静态反射,可与任何枚举类型一起使用,而无需任何宏或样板代码

    2. **字符串到枚举值转换**:`magic_enum::enum_value(str)`则可以将字符串转换回枚举值,如果字符串不匹配任何枚举值,该函数会抛出异常。 3. **枚举值迭代**:`magic_enum::enum_values()`返回一个范围(range)...

    enumAutoPrint:自动在CPP上打印枚举!

    在CPP文件上定义枚举时,如果不手动添加执行此操作的代码段,就无法打印枚举器字符串-将枚举值转换为字符串,并添加输出流运算符以进行打印。 添加为每个枚举执行此操作的代码是一件痛苦的工作。 CPP枚举自动打印是...

    跨平台 获取本机IP/MAC地址,检测是否内网IP,字符串IP转换成Number地址

    本文将深入探讨如何在不同的操作系统上获取本机的IP和MAC地址,以及如何判断一个IP地址是否为内网IP,并将字符串形式的IP地址转换为数值表示。我们将主要关注以下几个知识点: 1. **跨平台获取本机IP地址**: 跨...

    C#调用dll时的类型转换总结

    在C#中,字符串(`string`)不能直接与C++中的`char*`或`char**`对应。因此,需要借助`Encoding`类来实现转换。 #### 输入参数转换 输入参数通常是一个字符串数组,在C#中表示为`string[]`。首先,使用`Encoding....

    中山大学黎培兴C++语言程序设计ppt

    第七段代码`str_to_int`函数演示了如何将字符串转换为整数。通过遍历字符串,逐位计算数字的值,并累积到结果`n`中。 6. 子字符串查找: `find_substr`函数在第八段代码中,实现了在一个字符串中查找子字符串的功能...

    C++习题 6数组与指针

    本章主要讲解了C++中数组与指针的相关知识,包括数组的定义、多维数组的概念以及指针的基本使用等。通过上述知识点的学习,可以帮助读者更好地理解和掌握C++中数组与指针的使用技巧。在实际编程过程中,合理利用数组...

    C++/CLI教程

    教程将解释如何进行字符串转换和格式化。 12. 枚举(Enumerations):在C++/CLI中可以定义枚举类型,它们在托管代码中表示为System::Enum类型。 13. 类型转换(Type Casts):包括显式和隐式类型转换,以及C++/CLI...

    C++C#数据类型对照表

    - `char*`在C++中表示指向一个字符串的指针,在C#中使用`System.String`类型表示字符串。 - **LPWSTR (wchar_t*) - System.String** - `wchar_t*`在C++中表示宽字符指针,通常用于宽字符串,在C#中同样使用`...

    C++基础与提高

    本书还涉及了C++中系统string类的使用,这是一个预先定义好的类,用于处理字符串,它提供了一系列的成员函数来处理字符串数据。C++之父Bjarne Stroustrup对于C程序员提出的建议部分,则可能会包含如何有效地从C过渡...

    王桂林老师 c++基础与提高.pdf

    - 系统string类:提供了灵活的字符串处理方法。 3. 封装:封装是面向对象编程的重要特性,它通过使用struct和class实现数据和操作的封装,隐藏了对象的内部实现细节,只暴露了必要的接口。 4. 类与对象:C++中的...

    Visual C++ 2005入门经典--源代码及课后练习答案

    6.7.2 从字符串中删除空格 268 6.7.3 计算表达式的值 268 6.7.4 获得项值 271 6.7.5 分析数 272 6.7.6 整合程序 274 6.7.7 扩展程序 276 6.7.8 提取子字符串 277 6.7.9 运行修改过的程序 280 6.8 ...

Global site tag (gtag.js) - Google Analytics