我有一个数字字符串数组:
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
。如果是abc5xyz
,value
应该是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/