1

我有一个数字字符串数组:

char numbers[5][10] = { "123456789", "0001234", "abc5xyz", "", "987654321" };

我将此数组传递给一个函数:

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

在这个函数中,我如何检查整个字符串是否只有数字,如果是则返回 true?到目前为止,我所拥有的是:

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);
            // sscanf(p, "%d", &value);
        }
    }
}

这只是返回:

123456789array: '123456789' int value: -1217188485
0001234array: '0001234' int value: -1217188485
5array: 'abc5xyz' int value: -1217188485
array: '' int value: -1217188485
987654321array: '987654321' int value: -1217188485

我试图让 value 变量等效于字符串。所以如果字符串是123456789value应该是123456789。如果是abc5xyzvalue应该是0

到目前为止,它只是将字符转换为 0 并返回:(

完整来源

#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);
            // sscanf(p, "%d", &value);
        }

        // printf("%c", numArray[i]);
    }
// printf("- ");
}

int main( ) {

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

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

      return 0;
   }
4

2 回答 2

6

for循环MyFNatoi()应该基于数组的长度而numArray不是大小:使用strlen(numArray)和不10

用于isdigit()确定字符是否为数字。

如果所有字符都是数字,则分配*valueatoi(). 否则,设置*value0

void MyFNatoi(char *numArray, int *value)
{
    int i;
    const int len = strlen(numArray);

    for (i = 0; i < len; i++)
    {
        /* #include <ctype.h> for 'isdigit()'. */
        if (!isdigit(numArray[i])) break;
    }
    /* #include <stdlib.h> for 'atoi()'. */
    *value = len == i ? atoi(numArray) : 0;
}
于 2012-04-15T21:19:56.120 回答
4

不要设置*value为 0 来表示失败 - 0 是一个有效的整数。正如您在文本正文中指出的那样,请改用返回值。使用标准库而不是自己循环。

#include <stdio.h>

/* return true on success */
int MyFNatoi(const char *numArray, int *value)
{
    int n = 0;
    return sscanf(numArray, "%d%n", value, &n) > 0 /* integer was converted */
       &&  numArray[n] == '\0'; /* all input got consumed */
}
于 2012-04-15T21:40:35.973 回答