C - 将字符串转换为变量名称

时间:2015-08-03 03:17:08

标签: c string variables

如何将字符串转换为变量名?例如。我有一个字符串列表:

     "str1", "str2", "str3", etc.

结构:

struct my_struct {  
       int str1;  
       int str2;  
       int str3;  
} m = {5, 10, 15, ... etc};  

给定字符串"str2",我想打印与之关联的变量 名称m.str2。 C有什么办法吗?

谢谢!

5 个答案:

答案 0 :(得分:8)

这在C.中根本不可能 查看此问题以获取更多详细信息。 How to return a variable name and assign the value of the variable returned in c

引用Wichert的话,'我建议你重新考虑你想要解决的问题,并检查是否有更好的方法来解决它。也许使用数组,映射或散列表可能是一种适合您的替代方法。'

答案 1 :(得分:4)

在C中,您无法动态创建变量或符号名称

答案 2 :(得分:3)

这是一种方式。

if ( strcmp(str, "str2") == 0 )
{
   // Use m.str2
}

这将是数百个变量的问题。在这种情况下,你必须提出一些其他的机制。

答案 3 :(得分:0)

这是一种方法,请查看我编写的示例代码。我使用整数指针ptr来做到这一点。

#include <stdio.h>
#include <string.h>
const char *s[] = {"str1", "str2", "str3", "str4", "str5", "str6", "str7", "str8", "str9", "str10"};
struct temp
{
    int str1;
    int str2;
    int str3;
    int str4;
    int str5;
    int str6;
    int str7;
    int str8;
    int str9;
    int str10;
}m = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};

main()
{
    char str[10];
    int *ptr;
    int i;
    ptr = &m.str1;
    printf("enter string: \t");
    scanf("%s", str);
    for(i=0;i<10;i++)
    {
        if(strcmp(str,s[i]) == 0)
        {
            break;
        }
    }
    printf("value = %d\n", *(ptr+i));

}

如果有任何错误,请纠正我。

答案 4 :(得分:0)

您想要的是Smalltalk语言在1980年的解释器中使用的内容;以及Python仍在通过TTY Command Shell Program用C语言从字符串char创建对象变量的方式。

我们通过将结构与嵌套结构一起使用来完成这些操作。但是实际的变量名称实际上从未声明过。但是,通过在结构中搜索存储的char名称进行条件搜索来匹配它们,或者如果不存在,则会创建它们。

如果它确实存在于结构体​​列表中,它将有条件地查找()它及其存储的值,或者根据程序设计要执行的操作分配其值。

通过将令牌用于(tok),(s),(t),(e)以及令牌流读入的其他一些符号,可以最好地理解此示例:

if (tok == "IDENT";) {

当它如上所述找到标识符(来自lex的变量标签)标记时,它将向前查找并获取变量名称,然后创建它,执行其前瞻性计算,并在另一个char类型定义(例如)之后包含另一个变量“ CHAR”或“ FLOAT”(双精度)等。

现在要做的是有条件地设置所有内容,因为这些内容将被读到tok令牌流分配的结构列表中。

“ CHAR”“ x”“等于”“ INT”“ 5”“ NEWL(用于\ N)”“ CHAR”“ y”“等于”“ INT”“ 5”“ NEWL”“ PRNT”“ CHAR” “ x”“ NEWL”。

因此,基本上所有通过void函数的变量都被有条件地分配给结构列表,并同样将它们的值存储在其中。

它不是您需要与其存储的变量名称相匹配的变量。它是单个tok变量所需的唯一匹配项,并且是您需要的超前提示-

struct Var v; //--declared in .h then--
if(tok == 'CHAR') //--and-- 
v = {tok2, s, t} //

“ tok2”是您的vars字符名称,“ s”和“ t”是预取以获取,计算和分配它们的名称。基本上,Python使用一个名为tok的C变量来全部命名。然后,匹配使它们既动态又易于Python使用。 atoi和strtod也可以即时进行整数和doublke转换。它的高级功能。

整个过程在早期ANCI C中被称为“扫描仪”和“计算器”。研究Dennis Ritchie和Tobias Shrighner。实际上,Tobias从事过几种口译员的工作。