如何在Objective-C中检查一个字符是否为数字?

17

我需要检查一个字符是否是数字。

NSString *strTest=@"Test55";
char c =[strTest characterAtIndex:4];

我需要找出'C'是否为数字。 我该如何在Objective-C中实现此检查?


5
小心,characterAtIndex: 返回的是 unichar 而不是 char。如果你处理非 ASCII 文本可能会导致误判。请注意截断。 - dreamlax
6个回答

31

注意characterAtIndex:的返回值不是char,而是unichar。因此像这样进行强制类型转换可能存在危险...

另一个可选代码如下:

NSString *strTest = @"Test55";
unichar c = [strTest characterAtIndex:4];
NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet];
if ([numericSet characterIsMember:c]) {
    NSLog(@"Congrats, it is a number...");
}

22

在标准C语言中,有一个名为int isdigit( int ch );的函数被定义在"ctype.h"头文件中。如果ch是数字,则该函数将返回非零值(TRUE)。

您也可以手动检查:

if(c>='0' && c<='9')
{
  //c is digit
}

非常感谢...我有一个问题?? 如何将unichar转换为int? 我刚刚尝试了以下代码 int ivalue=[[NSNumber numberWithChar:cChar] intValue];这正确吗? - syam
@syam:你不需要跳过那么多的环节。你可以通过使用“int ivalue = cChar;”将“unichar”转换为“int”。 - dreamlax
3
如果它们是日语数字字符“零”到“九”,该怎么办? - amphetamachine
我认为isdigit()可能更好,因为它更易于阅读...尽管使用该函数可能掩盖了它无法处理非ASCII数字字符的事实。 - ArtOfWarfare

3
这其实很简单:
isdigit([YOUR_STRING characterAtIndex:YOUR_POS])

1
我选择了这个答案,但只是因为我只需要0-9(因为我正在处理编程语言,而不是用户界面语言)。如果我处理面向用户的语言,我可能会想使用decimalDigitCharacterSet解决方案。https://dev59.com/nHE95IYBdhLWcg3wi-Uc#2271360 - ArtOfWarfare

3

有一个名为 isdigit 的 C 函数,用于判断字符是否是数字。


1

您可能需要查看NSCharacterSet类的参考文档。


0
你可以考虑编写一个通用函数,如下所示:
BOOL isNumericI(NSString *s)
{
   NSUInteger len = [s length];
   NSUInteger i;
   BOOL status = NO;

   for(i=0; i < len; i++)
   {
       unichar singlechar = [s characterAtIndex: i];
       if ( (singlechar == ' ') && (!status) )
       {
         continue;
       }
       if ( ( singlechar == '+' ||
              singlechar == '-' ) && (!status) ) { status=YES; continue; }
       if ( ( singlechar >= '0' ) &&
            ( singlechar <= '9' ) )
       {
          status = YES;
       } else {
          return NO;
       }
   }
   return (i == len) && status;
}

这个函数并没有完成OP所要求的功能。此外,使用NSScanner可以减轻您的函数所需付出的大部分工作。 - dreamlax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接