首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析c中的key-value

解析c中的key-value
EN

Stack Overflow用户
提问于 2013-03-27 19:05:21
回答 2查看 3.8K关注 0票数 1

如何在C中解析键值字符串并将其赋值给适当的变量?

也就是说,我们将这个字符串传递给一个程序:

代码语言:javascript
复制
x = 193

并且它将为appr赋值。变量,因此

代码语言:javascript
复制
printf("%i", x);

产生

代码语言:javascript
复制
193
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-27 19:33:05

给定的

代码语言:javascript
复制
char keyname[32];
int val;

其中我们希望存储整数赋值的键名和值的名称,以及示例格式为const char * str = "x = 193"的字符串,我们可以使用sscanf() C库函数为我们执行解析:

代码语言:javascript
复制
sscanf(str, "%32[^=]=%d", keyname, &val)

请注意,例如,str = " x = 193"将字符串" x "存储到keyname中,因此如果您希望在赋值周围和变量名之前使用灵活的空格语法,则仍然需要去掉额外的空格。

sscanf()将返回成功转换的次数,因此您应该测试它在我们的示例中是否返回2

一旦你得到了存储在keynameval中的变量名和它的整数值,你就可以像上面的@unwind建议的那样,看看你应该把val赋给哪个变量,用strcmp测试。如果您有许多固定名称的变量,那么您可以有一个表并使用查找函数来使其比一长串不可维护且容易出错的if语句要漂亮得多。

票数 6
EN

Stack Overflow用户

发布于 2013-03-27 19:06:28

你不能在运行时神奇地引入变量。当C程序运行时,变量的名称早就消失了,编译器需要这些信息来构建代码,但CPU并不需要这些信息来运行代码。

您将不得不对已知的变量名执行strcmp(),并相应地进行赋值。要优化这一点(对于许多Names值),当然可以使用类似于hash table的东西来存储包含值的名称和整数对。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15657306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档