相关疑难解决方法(0)

C++字符串到枚举

在C++中有一种简单的方法可以将字符串转换为枚举(类似于Enum.ParseC#)吗?switch语句会长,所以我想知道是否有更简单的方法可以做到这一点?

编辑:

感谢您的所有回复.我意识到,对于我的特定情况,有一种更简单的方法.字符串总是包含字符'S'后跟一些数字,所以我只是做了

int i = atoi(myStr.c_str() + 1);
Run Code Online (Sandbox Code Playgroud)

然后切换i.

c++ string enums

17
推荐指数
6
解决办法
7万
查看次数

制作C标识符和字符串?

假设您要生成标识符和字符串的匹配列表

enum
{
NAME_ONE,
NAME_TWO,
NAME_THREE
};

myFunction(NAME_ONE, "NAME_ONE");
myFunction(NAME_TWO, "NAME_TWO");
myFunction(NAME_THREE, "NAME_THREE");
Run Code Online (Sandbox Code Playgroud)

..没有重复自己,没有自动生成代码,使用C/C++宏

初步猜测:

您可以添加包含的#include文件

myDefine(NAME_ONE)
myDefine(NAME_TWO)
myDefine(NAME_THREE)
Run Code Online (Sandbox Code Playgroud)

然后使用它两次,如:

#define myDefine(a) a,
enum {
#include "definitions"
}
#undef myDefine

#define myDefine(a) myFunc(a, "a");
#include "definitions"
#undef myDefine
Run Code Online (Sandbox Code Playgroud)

但#define不允许你在字符串中放置参数?

c c-preprocessor preprocessor-directive

15
推荐指数
1
解决办法
7015
查看次数

在C中从String转换为Enum

是否有一种方便的方法来获取字符串(由用户输入)并将其转换为枚举值?在这种情况下,字符串将是枚举值的名称,如下所示:

enum Day
{
    Sunday = 0,
    Monday = 1,
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,如果用户给出了Day的名称,则可以将其解析为相应的Enum值.

诀窍是,我有超过500个我正在使用的值,它们分布在多个枚举中.

我知道c#中的Enum.Parse方法,所以在c中有这种形式吗?

c string enums

12
推荐指数
1
解决办法
1万
查看次数

何时在一个文件中多次包含相同的标题是有用的?

我正在阅读一个文件中相同标题的多个包含,并找到一个有趣的声明(链接):

有两个带头文件的技巧是你故意多次包含它(这确实提供了一个有用的功能).

据我所知,这些技巧可能在实际项目中不受欢迎和困惑(特别是因为人们会采取预防措施来防范多种内容,例如包括警卫和内部人员#pragma once).但是,那些技巧是什么?我提出了一些想法,但希望看到一些实际的例子(理想情况下,安全和尝试).

我的想法:

  • C中的伪模板,其中模板参数被预处理器定义替换.它可以在没有包含的情况下完成,但功能可能太大或太多,因此制作单独的文件是有意义的.
  • 逐块结构/类构造(连接片段).在使用公共成员定义结构时,它可以帮助模拟C中的继承并防止代码重复.
  • 查找表和其他编译时数据结构(同样,借助预处理器定义).

c c++ include header-files

8
推荐指数
1
解决办法
2674
查看次数

C:将字符串映射到ENUM

可能重复:
在C中使用枚举类型变量作为字符串的简单方法?

除了手动方式之外,是否有任何将用户输入字符串转换为ENUM值的优雅方式是直接C.

调用以ENUM作为参数的函数的简化示例:

enum = {MONDAY,TUESDAY,WEDNESDAY};

...

//Get user to enter a day of the week from command line
...

//Set the work day according to user input
if (strcmp(user_input,"MONDAY")==0){
   SET_WORK_DAY(MONDAY);
} else if (strcmp(user_input,"TUESDAY")==0){
  SET_WORK_DAY(TUESDAY);
}
...
Run Code Online (Sandbox Code Playgroud)

谢谢

c

7
推荐指数
1
解决办法
1万
查看次数

枚举值的字符串表示形式

gcc 4.4.2 c89

我有以下枚举:

enum drop_options_e
{
    drop_ssm,
    drop_snm,
    drop_ssb
};
Run Code Online (Sandbox Code Playgroud)

我只是想知道这是从枚举中获取字符串表示值的最佳方法.

所以基本上,不是为drop_ssm返回值0,而是可以获得'drop_ssm'.

非常感谢任何建议,

c

4
推荐指数
1
解决办法
1323
查看次数

如何在C中维护字符串与其索引之间的映射?

我有一个枚举Eg.

enum {
APPLE,
MANGO,
BANANA
}
Run Code Online (Sandbox Code Playgroud)

和相应的字符串数组

char fruits[] = 
{
 "apple",
 "mango",
 "banana"
}
Run Code Online (Sandbox Code Playgroud)

我需要检索字符串的索引,因为我有字符串.因此,如果字符串是苹果,我需要得到0,依此类推.[ Enum另外,可能有助于解决方案]

是否有一种优雅的方式,保存[apple,0],[banana,1]简短,我可以用作宏.我不需要像哈希表那样冗长的东西.可以Enum协助映射吗?

c

4
推荐指数
1
解决办法
160
查看次数

如何在C语言中枚举枚举中的字符串

typedef enum testCaseId {"TC-HIW-0019"= 0,
"TC-HIW-0020","TC-HIW-0021"
} testCaseId;

我需要在枚举中表示我的测试用例.在我的测试功能中,我需要在测试用例之间切换,如:

void testfunc(uint8_t no)
{  
    switch(no)
    {
        case 0:
        case 1:
        default:
    }
}
Run Code Online (Sandbox Code Playgroud)

所以任何人都可以帮助如何使用枚举来声明字符串.

c string enums

3
推荐指数
2
解决办法
1094
查看次数

C程序可以根据其值确定宏标识符/枚举名称吗?

假设我们将一些错误代码定义为宏 -

#define ERR_SUCCESS 0
#define ERR_BAD_INPUT 1
Run Code Online (Sandbox Code Playgroud)

...

或者作为枚举数据类型 -

enum err_t = { ERR_SUCCESS, ERR_BAD_INPUT, ...};
Run Code Online (Sandbox Code Playgroud)

其中一个id由以下函数返回 -

int foo(); /* if foo() returns 0, it means success, etc */
Run Code Online (Sandbox Code Playgroud)

调用者foo()可以确定哪个标识符/名称(ERR_SUCCESS,ERR_BAD_INPUT,...)链接到int返回值?

c macros enums

3
推荐指数
2
解决办法
180
查看次数

如何在C中将字符串转换为枚举值

我有一个文件有一些定义,如:

TRACE( tra_1, "AA")
TRACE( tra_1, "BB")
TRACE( tra_1, "CC")
TRACE( tra_1, "DD")
TRACE( tra_1, "EE")
..
Run Code Online (Sandbox Code Playgroud)

等等.其中AA,BB,CC,DD和EE是字符串.

我想从文件中获取这些TRACE定义并将它们转换为枚举.预处理器的输出应如下所示:

typedef enum{
AA,
BB,
CC,
DD,
EE
} TRACE;
Run Code Online (Sandbox Code Playgroud)

c c-preprocessor

-1
推荐指数
1
解决办法
3568
查看次数