我有一个数字字符串数组:
char numbers[5][10] = { "123456789", "0001234", "abc5xyz", "", "987654321" };
Run Code Online (Sandbox Code Playgroud)
我将此数组传递给函数:
for(i=0; i<5; i++) {
MyFNatoi(numbers[i], &value);
printf("array: '%s' int value: %d\n", numbers[i], value);
}
Run Code Online (Sandbox Code Playgroud)
在这个函数中,我如何检查整个字符串是否只是数字,如果是,则返回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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
而这只是回报:
123456789array: '123456789' int value: -1217188485
0001234array: '0001234' int value: -1217188485
5array: 'abc5xyz' int value: -1217188485
array: '' int value: -1217188485
987654321array: '987654321' int value: -1217188485
Run Code Online (Sandbox Code Playgroud)
我试图让值变量相当于字符串.所以,如果字符串是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;
}
Run Code Online (Sandbox Code Playgroud)
的for环路MyFNatoi()应当基于的长度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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9464 次 |
| 最近记录: |