检查C中的整个字符数组是否只是数字,如果是则返回true?

标签 c

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

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);
  }

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

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

我试图让值变量等价于字符串。因此,如果字符串是 123456789,则 value 应该是 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;
   }

最佳答案

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

使用isdigit() 判断一个字符是否为数字。

如果所有字符都是数字,则将*value 赋值给atoi()。否则,将 *value 设置为 0:

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;
}

关于检查C中的整个字符数组是否只是数字,如果是则返回true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166157/

相关文章:

c++ - libuvc 程序无法编译

c - C中字符数组输入输出问题

c - 格式化字符串攻击 - 覆盖 __DTOR_END__

c - 使用结构体确定平面上的点 - C

c - char 指针的加法和减法

c - 使用 waitpid() 后,我的 WIFSIGNALED()/WTERMSIG() 宏出现问题

c - 如何用C语言创建操作系统?

c++ - 如何监控 Linux 的 Wifi 状态

c++ - 将内存分配给 void* 时的 gcc calloc 行为

c - 为什么过早访问 ReadFileEx 的输入缓冲区会导致数据损坏?