0

私はNSString数式である を持っています。演算子(+,-,*,/)とオペランドがあります(digits from 0 to 9,integers,decimals etc)NSStringこれをに変換したいNSArray。たとえば、myNSStringが「7.9999-1.234*-9.21」の場合。NSArray要素 7.9999,-,1.234,*,-,9.21 を同じ順序で配置したい。どうすればこれを達成できますか?

私はコードを試しました。ただし、すべてのシナリオで機能するわけではありません。ここにあります:

コード:

NSString *str=@"7.9999-1.234*-9.21";
NSMutableArray *marray=[[NSMutableArray alloc] init];
    for(i=0;i<6;i++)
    {
        [marray addObject:[NSNull null]];
    }
    NSMutableArray *operands=[[NSMutableArray alloc] initWithObjects:@"7.9999",@"1.234",@"9.21",nil];
    NSMutableArray *operators=[[NSMutableArray alloc] initWithObjects:@"-",@"*",@"-",nil];
    for(i=0,j=0,k=0,l=0;i<=([str length]-1),j<[operands count],k<[operators count],l<[marray count];i++)
    {
        NSString *element=[[NSString alloc] initWithFormat:@"%c",[str characterAtIndex:i]];
        BOOL res=[element isEqualToString:@"+"]||[element isEqualToString:@"-"]||[element isEqualToString:@"*"]||[element isEqualToString:@"/"];
        if(res==0)
        {
            [marray replaceObjectAtIndex:l withObject:[operands objectAtIndex:j]];


        }
        else
        {
            l++;
            [marray replaceObjectAtIndex:l withObject:[operators objectAtIndex:k]];
            k++,l++,j++;

        }
    }
    for(i=0;i<6;i++)
    {
        NSLog(@"%@",[marray objectAtIndex:i]);
    }

ここで、str は変換される文字列です。私の配列は文字列strを変換して得た配列です。このコードを実行すると、コンソールに次のように表示されます。

 7.9999
 -
 1.234
 *
 <null>
 -
4

3 に答える 3

0

ありがとう@Wainと@Hinata Hyuga.あなたの提案の助けを借りて、任意の文字列を配列に変換するコードを見つけました。

ここにコードがあります

NSMutableArray *convArray=[[NSMutableArray alloc] init];
    NSScanner *scanner = [NSScanner scannerWithString:inputString];
    NSCharacterSet *opSet=[NSCharacterSet characterSetWithCharactersInString:@"+-/*"];
    [scanner setCharactersToBeSkipped:opSet];
    int i;
    for(i=0;i<[inputString length];)
    {
        if([inputString characterAtIndex:i]=='+'||[inputString characterAtIndex:i]=='-'||[inputString characterAtIndex:i]=='*'||[inputString characterAtIndex:i]=='/')
        {
            [convArray addObject:[[NSString alloc] initWithFormat:@"%c",[inputString characterAtIndex:i]]];
            i++;
        }
        else
        {
            NSString *oprnd;
            [scanner scanUpToCharactersFromSet:opSet intoString:&oprnd];
            [convArray addObject:oprnd];
            i=i+[inputString rangeOfString:oprnd].length;
        }
    }
    return convArray;
于 2013-08-13T06:17:39.390 に答える