2011-04-26 59 views
0

我传递一个参数传递给一个C程序:转换阵列用C

程序名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++; 
} 
+0

请更精确的你想要什么。你期望一个包含{1,2,3,4}的int []吗?此外,这听起来像作业,所以标记为 – 2011-04-26 21:51:50

+1

肯定它是一个较大的家庭作业的一小部分,你可能已经看到我今天问过的其他问题。但我不认为它需要被标记为这样,因为这是一个微不足道的语言问题。 – 2011-04-26 21:56:01

回答

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

您忘记了终止每个字符......您将以包含{1234,234,34,4}的整数组结束。 – Lou 2011-04-26 21:55:47

+1

'output [i] = input [i] - '0';' – 2011-04-26 22:01:02

+0

@Lou和@Conrad你是对的,没有理由使用atoi如果我们要转换单个字符(如果它不是null结尾,会遇到问题> _ <) – Thebigcheeze 2011-04-26 22:02:54

1

看到,因为这是家庭作业,你也可以做

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

但要小心input[i]实际上是一个数字(即它的'0''9'之间)!

1

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

这是一个小的示例应用程序,它将字符串转换为整数的数组。如果该字符不是有效的十进制数字,则将-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; 
} 

还要检查这些问题: