如何将字符串转换为数字

时间:2015-03-08 16:52:16

标签: c

在我正在处理的程序中,我想允许用户输入程序将转换为预定义数字的符号名称。

例如,如果用户键入AA,则程序将使用值10,但如果用户键入BB,则程序将使用值20。< / p>

如何将字符串转换为数字?

4 个答案:

答案 0 :(得分:4)

您需要使用查找表。使用scanf读取字符串,然后调用lookup函数将字符串转换为值。

int value = -1;
char string[32];
if ( scanf( "%31s", string ) == 1 )
    value = valueForString( string );

这是一个简单的查找表

typedef struct
{
    const char *string;
    int value;
}
    stLookup;

static stLookup lookup[] =
{
    {  "AA", 10  },
    {  "BB", 20  },
    {  NULL, -1  }
};

这是valueForString函数

int valueForString( const char *string )
{
    stLookup *lptr;

    for ( lptr = lookup; lptr->string != NULL; lptr++ )
        if ( strcmp( lptr->string, string ) == 0 )
            break;

    return( lptr->value );
}

答案 1 :(得分:2)

您可以创建一个包含名称的数组和一个包含相应值的数组,例如

char *a[10] = {"AA", "BB", ...};
int   b[10] = {10, 20, ...};

然后你对一个char *指针执行scanf,例如命名为input,然后你可以迭代数组a来查找索引,然后检索数组b中的相应索引:

for (i = 0; i < 10; i++) 
{
    if (!strcmp(input, a[i]))
        break;
}

if (i != 10)
    value = b[i];

然后通过输入名称&#39; AA&#39;来获得值。

注意:它不是可以运行的真实代码,但我认为它看起来可能比伪代码简单。

答案 2 :(得分:1)

看起来你想解释某个表达式(例如AA+BB评估到30,因为-or在一个环境中 - {{1}绑定到10并且AA绑定到20),使用C程序的变量(或其他一些变量或bindings)。

我不确定它通常是否可行和合理(如果用户键入BB,您期望的行为是什么?)。

也许你可以嵌入一些现有的翻译,例如您的计划中GuileLua。否则,请考虑parsing一些表达式(您需要将其语法形式化,例如在BNF中并将其semantics定义为)abstract syntax tree(AST),然后编译解释器在某些环境中评估此类AST。

请注意,在运行时,对于已编译的C程序,C变量abort()(在C源代码中声明为AA)不再存在(仅在编译时才知道,而不是在运行时)

如果您使用的是Linux,或许请阅读dlsym(3)(这可能会让您能够在运行时找到某个全局变量或符号的地址,并给出其名称)。

BTW,请阅读call stacks&amp; continuations&amp; interpreted languages&amp; eval

答案 3 :(得分:0)

scanf是你应该使用的c函数