3

この方法:

- (BOOL)checkForDigits {
    NSString *editableExpression = self.expression.text;
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                return TRUE;

            }
            else {
                return FALSE;
            }
        }
    }
}

常に FALSE を返すようで、その理由がわかりません。私は isnan メソッドを使用していましたが、それを試してみましたがうまくいかなかったので、自分の isnan を作成しました (実際には isnan の反対です)。数字配列はちょうど

char digits[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
4

7 に答える 7

2

これを使って:

- (BOOL)checkForDigits {
    char digits[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
    BOOL result;
    NSString *editableExpression = @"dsjkdjk12lkv";
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                NSLog(@"true");
                return TRUE;

            }
            else {
                result = FALSE;
            }
        }
    }
    return result;
}

実際には、最初のループでのみ false を返していました。そのため、ループは 1 サイクルだけ実行されていました。

于 2013-08-16T13:43:06.997 に答える
0

なぜなら

charAtPositionのような数字ではなく文字を含む'1', '2',......

characterAtIndex指定された配列位置にある文字を返します。

于 2013-08-16T13:25:03.883 に答える
0

NSScanner を使用するのがより良い方法でしょうか?

        NSScanner *scanner = [NSScanner scannerWithString:string];
        NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

        [scanner scanCharactersFromSet:numbers intoString:&obj1String];
        obj1Num = [NSNumber numberWithInt:[obj1String integerValue]];

        if(obj1String) {

        } else {

        }
于 2013-08-16T13:28:40.077 に答える
0

以下の方法で変更します

- (BOOL)checkForDigits {
    NSString *editableExpression = self.expression.text;
    BOOL isDigit = FALSE;
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                 return TRUE;

            }
        }
    }
    return FALSE;
}
于 2013-08-16T13:59:23.817 に答える
0

あなたeditableExpressionは数字から始めていません。

NSString *editableExpression =@"A1" // return false

NSString *editableExpression =@"1A" // return True  

//This will return TRUE if string contain digit
- (BOOL)checkForDigits {
    NSString *editableExpression = @"1a1";
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                return TRUE;
            }
        }
    }
    return FALSE;
}
于 2013-08-16T13:29:53.630 に答える
0

これを試して:

NSRange match = [string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:0 range:NSMakeRange(0, string.length)];
if (match.location == NSNotFound) return NO;
else return YES;
于 2013-08-16T13:46:35.880 に答える