将字符数组转换为C中的整数数组

时间:2011-04-26 21:48:29

标签: c char int atoi

我正在向C程序传递一个参数:

  

program_name 1234

int main (int argc, char *argv[]) {

    int     length_of_input = 0;    
    char*   input           = argv[1];


    while(input[length_of_input]) {
        //convert input from array of char to int
        length_of_input++;
    }
}

我希望能够将传递给函数的参数的每个数字分别用作整数。 atoi(input [])抛出编译时错误。

此代码无法编译:

while(input[length_of_input]) {
    int temp = atoi(input[length_of_input]);
    printf("char %i: %i\n", length_of_input, temp);
    length_of_input++;
}

4 个答案:

答案 0 :(得分:4)

int i;
for (i = 0; input[i] != 0; i++){
    output[i] = input[i] - '0';
}

答案 1 :(得分:1)

看到这也是你的家庭作业

output[i] = input[i] - '0';

但请注意input[i]实际上是一个数字(即它在'0''9'之间)!

答案 2 :(得分:1)

首先,您必须检查需要为整数数组分配多少空间。这可以使用strlen()函数完成,也可以通过字符串迭代并检查找到多少个有效字符。然后,您必须遍历字符串并将每个(有效)字符转换为等效的整数。这里很难使用atoi()scanf()系列函数,因为它们除了数组作为输入。更好的解决方案是编写自己的小转换器函数或片段进行转换。

这是一个小的示例应用程序,它将字符串转换为int数组。如果字符不是有效的十进制数字,则将-1放入数组中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int length, i;
    int *array;
    char *input = argv[1];

    /* check if there is input */
    if(input == NULL) return EXIT_FAILURE;

    /* check the length of the input */
    length = strlen(input);
    if(length < 1) return EXIT_FAILURE;

    /* allocate space for the int array */
    array = malloc(length * sizeof *array);
    if(array == NULL) return EXIT_FAILURE;

    /* convert string to integer array */
    for(i = 0; i < length; ++i) {
        if(input[i] >= '0' && input[i] <= '9')
            array[i] = input[i] - '0';
        else
            array[i] = -1; /* not a number */
    }

    /* print results */
    for(i = 0; i < length; ++i)
        printf("%d\n", array[i]);

    /* free the allocated memory */
    free(array);

    return EXIT_SUCCESS;
}

同时检查以下问题:

答案 3 :(得分:0)

你可以测试参数是否是一个数字whith isdigit()

http://www.cplusplus.com/reference/clibrary/cctype/isdigit/

并使用atoi功能。

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

使用时要小心

char*   input           = argv[1];

将字符串从argv复制到输入(在使用malloc之后),它更好。