How to convert NSString intoNSArray?

眉间皱痕 提交于 2019-12-25 07:34:43

问题


I have an NSString which is a mathematical expression. I have operators (+,-,*,/) and operands (digits from 0 to 9,integers,decimals etc). I want to convert this NSString into NSArray. For example if my NSString is "7.9999-1.234*-9.21". I want NSArray having elements 7.9999,-,1.234,*,-,9.21 in the same order. How can I accomplish this?

I have tried a code. It dosent work in all scenarios though. Here It is:

code:

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]);
    }

Here str is the string to be converted. My array is the array obtained by converting the string str. When I execute this code I get the following on console:

 7.9999
 -
 1.234
 *
 <null>
 -

回答1:


You should use NSScanner, scanning up to your operator characters, then when you find one, save the scanned string and then save the operator into the array and skip the operator (setScanLocation:). Continue doing this till you get to the end of the string (in a loop, one iteration for each operator).




回答2:


NSArray * marray = [str componentsSeparatedByCharactersInSet:
                      [NSCharacterSet characterSetWithCharactersInString:@"+-*/"]
                    ];



回答3:


ThankYou @Wain and @Hinata Hyuga.I figured out a code that would work to convert any string to array with the help of your suggestions.

Here is the code

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;


来源:https://stackoverflow.com/questions/18185553/how-to-convert-nsstring-intonsarray

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!