2012-04-05 81 views
0

对不起,令人困惑的问题,但我想要做的是将数组存储在一个变量。将一串数字转换为一个整数,存储结果

我想存储*value中的数字,以便代替int value: -12118433669它将是int value: 123456789

输出

123456789 
array: '123456789' int value: -1218433669 
00
array: '00' int value: -1218433669 
5 
array: 'abc5xyz' int value: -1218433669 

array: '' int value: -1218433669 
987654321 
array: '987654321' int value: -1218433669 

SOURCE

#include <stdio.h> 

MyFNatoi(char *numArray, int *value) { 

    int i; 

    for (i = 0; i < 10; i++) { 
     if (numArray[i] > 47 && numArray[i] < 58) { 
      printf("%c", numArray[i] - 0); 
     } 
    } 

} 

int main() { 

    char numbers[5][10] = { "123456789", "00", "abc5xyz", "", "987654321" }; 
    int i, value; 

    for(i = 0; i < 5; i++) { 
     MyFNatoi(numbers[i], &value); 
     printf("\narray: '%s' int value: %d\n", numbers[i], value); 
    } 
    return 0; 

} 
+5

你永远不会给'* value'分配任何东西,那么你期望发生什么? – 2012-04-05 00:04:11

+0

因此,这个问题的重点,我将如何将这些值存储在'* value'中?不要责怪我没有理由。 – eveo 2012-04-05 00:04:42

+1

好吧,在这种情况下:[你有什么尝试?](http://whathaveyoutried.com) – 2012-04-05 00:05:28

回答

0

我提出这个功能:

void MyFNatoi(const char *str, int *value) 
{ 
    if (value == NULL) 
     return; 

    *value = 0; 

    if (str != NULL) 
    { 
     int negative = 0; 

     if (*str == '-') 
     { 
      negative = 1; 
      str++; 
     } 

     while (*str && isdigit(*str)) 
     { 
      *value = (*value * 10) + (*str++ - '0'); 
     } 

     if (negative) 
      *value *= -1; 
    } 
} 

它处理负数,并只检查前导数字(所以不会从"abc123def456"例如出)。

+0

原始问题中没有任何内容表明需要处理消极处理。它是一个很好的接触,但是过度编码会导致代码膨胀并且会产生错误。 – abelenky 2012-04-05 12:57:54

-1

我的版本:

void MyFNatoi(char *numArray, int *value) 
{ 
    for (*value = 0; *numArray != '\0'; ++numArray) { 
     if (0x30 <= *numArray && *numArray <= 0x39) { 
      *value = 10* *value + *numArray - 0x30; 
     } 
    } 
} 
+0

为什么使用比较而不是更方便的'isdigit'函数?另外,不是减去魔术数字'0x30',而是可以减去'0'来使其更加明显。 – 2012-04-05 05:47:43

+0

原始代码使用比较而不是isdigit。为什么要更改原始代码? 0x30对我来说非常明显,比字符文字更有意义。对不同的人有不同的观点。 – abelenky 2012-04-05 05:53:37

-1
#define Zero '0' 
#define Nine '9' 

void MyFNatoi(char *numArray, int *value) { 

    int i; 
    *value = 0; 
    for (i = 0; i < 10 && numArray[i] != 0; i++) { 
     if (numArray[i] >= Zero && numArray[i] <= Nine) { 
      *value = *value * 10 + (numArray[i] - Zero); 
     } 
    } 

}