从char数组中获取值

时间:2014-10-11 07:42:37

标签: c arrays input char

我在下面编写了一个函数来获取char数组并操纵它的值(即,如果它是一个数字,则将char转换为int)。但是,我对如何管理char数组有疑问。当我查看input[i]时,它是正确的值(放在数组中的值。但是,&input[i]给出了大写字母,我不知道为什么会这样做。例如,如果我输入" 11"并跟踪变量,我可能得到以下结果:

input[0] is 1
&input[0] is D
input[1] is 1
&input[1] is E

在我的代码中,如果我尝试使用input[i],我会得到&#34的错误;传递参数使得指针来自整数而没有强制转换"。如果我使用&input[i],代码会编译,但我得到了错误的结果。这是怎么回事,我如何获取我想要获得的价值?

以下是我的代码:

void myFunction(char *input) {
    Queue* numberQueue = queue_new();
    Queue* opQueue = queue_new();
    int i = 0;
    int j;

    for (j = 0; j < strlen(input); j++) {
        printf("input[%d] is %c\n", i, input[i]);
        printf("&input[%d] is %c\n", i, &input[i]);

        int number = (int)input[i];

        /* queue_push_tail(queue, data) */
        queue_push_tail(numQueue, number);            /* ERROR */

        /* rest of code omitted */

        i++;
    }
}

1 个答案:

答案 0 :(得分:0)

如果我知道你想将input字符串中的每个数字推入queue_push_tail,作为整数值,那么你希望你的循环做这样的事情:

for (j = 0; j < strlen(input); j++) {

    if ( input[j] >= '0' && input[j] <= '9')
    {
        number = input[j] - '0';

        /* queue_push_tail(queue, data) */
        queue_push_tail(numQueue, number);            /* ERROR - FIXED*/

        /* rest of code omitted */
    }
}

回想一下,ASCII字符本身是无符号整数。您只需要通过减去ASCII '0'的值来调整每个字符的值。如果您需要将字符串中的所有数字收集到一个数字中(例如ac7f9gh3 =&gt; 793),则只需将未调整的值存储在临时字符串中,然后调用atoi (temp)