1

它应该做什么:每次将新字符附加到 NSMutableString 数字时,将输入的字符串组所有数字并打印出来。然后,如果当前字符不是数字,它会检查它的 + 或 x,或 *,-。如果它是其中之一,那么它将它附加到一个数组并打印出来。

它在做什么:输出中文

`Please enter math: 12+56x45
2012-05-02 23:52:06.538 CALC[1921:403] 퀱 
2012-05-02 23:52:06.541 CALC[1921:403] 퀱퀲 
2012-05-02 23:52:06.542 CALC[1921:403] running array (
"+"
)
2012-05-02 23:52:06.543 CALC[1921:403] 퀱퀲퀵  
2012-05-02 23:52:06.544 CALC[1921:403] 퀱퀲퀵퀶 
2012-05-02 23:52:06.544 CALC[1921:403] 퀱퀲퀵퀶큸 
2012-05-02 23:52:06.545 CALC[1921:403] 퀱퀲퀵퀶큸퀴 
2012-05-02 23:52:06.546 CALC[1921:403] 퀱퀲퀵퀶큸퀴퀵`

问题:我相信它与 unichar 有关,char current = [InputString characterAtIndex:i];但是当我在没有它的else if部分的情况下运行代码时,它可以正常工作。正如您所看到的,尽管作为字符串一部分的字符数是预期的数字,但问题似乎是它们使用了错误的语言。

我的代码:

int main ()
{
    char userInput[99];
    NSMutableString *number = [NSMutableString string];
    int i;

    printf( "Please enter math: " );

    scanf( "%s", userInput );
    fpurge( stdin );
    NSString *InputString = [NSString stringWithUTF8String:userInput];
    NSMutableArray *broken = [NSMutableArray array];

    for (i=0; i < [InputString length]; i++) {
        char current = [InputString characterAtIndex:i];
        NSString *cur = [NSString stringWithFormat:@"%c" , current];
        if (isalnum(current)) {
            [number appendString:[NSString stringWithCharacters:&current length:1]];
            NSLog(@"%@", number);
        }
        else if (current == '+'|| current == 'x'||current == '*'||current == '-') { 
            [broken addObject:[NSString stringWithFormat:cur]];
            NSLog(@"running array %@", broken);
        }
    }
    return 0;
}
4

2 回答 2

1

我看到你已经“转换”charNSString. 您为什么不尝试附加cur到您正在打印的字符串?所以改变:

[number appendString:[NSString stringWithCharacters:&current length:1]]

到:

[number appendString:cur]
于 2012-05-03T04:31:17.680 回答
1

这可能是一种将数字与运算符分开的更高级别的方法,因此您可以更轻松地处理您想要执行的数学......

NSString *equation = @"12+56x45";
NSCharacterSet *operatorCharacterSet = [NSCharacterSet characterSetWithCharactersInString: @"+-/x"];
NSCharacterSet *numberCharacterSet = [NSCharacterSet characterSetWithCharactersInString: @"1234567890"];

NSArray *numbersOnly = [equation componentsSeparatedByCharactersInSet: operatorCharacterSet];
NSArray *operatorsOnly = [equation componentsSeparatedByCharactersInSet: numberCharacterSet];

for (NSString *number in numbersOnly) {
    NSLog(@"%@", number);
}

for (NSString *operator in operatorsOnly) {
    NSLog(@"%@", operator);
}

最后位只是记录数字和运算符,以向您展示它们现在如何划分为不同的数组。这有点使您的任务变得微不足道,但是如果您假设方程式中的第一个数据是一个数字,您可以简单地串联遍历两个数组并进行数学运算。

于 2012-05-03T04:43:15.517 回答