2013-08-12 4 views
0

저는 수학적 표현 인 NSString입니다. 나는 연산자가 (+,-,*,/)이고 피연산자가 (digits from 0 to 9,integers,decimals etc)입니다. 이 NSStringNSArray으로 변환하고 싶습니다. 예를 들어 내 NSString이 "7.9999-1.234 * -9.21"인 경우 나는 동일한 순서로 요소 7.9999, -, 1.234, *, -, 9.21을 갖는 NSArray을 원한다. 이것을 어떻게 할 수 있습니까?NSString을 NSArray로 변환하는 방법?

나는 코드를 시도했다. 그것은 모든 시나리오에서 작동 dosent. 여기있다 :

코드 :

NSString *[email protected]"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을 변환하여 얻은 배열입니다. 내가 콘솔에서 다음을 얻을이 코드를 실행하면 :

7.9999 
- 
1.234 
* 
<null> 
- 
+0

사용 componentsSeparatedByCharactersInSet입니다. –

답변

2

당신은 스캔 한 문자열을 저장, 당신은 하나를 찾을 때, 운영자 캐릭터에 NSScanner 스캔을 사용하고 배열에 연산자를 저장해야하고 운영자 (setScanLocation:)를 건너 뜁니다. 문자열의 끝까지 루프를 반복 할 때까지이 작업을 계속합니다 (루프에서는 각 연산자에 대해 하나의 반복).

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

그러면 결과를 루프로 만들고 범위를 만들어 연산자를 얻은 다음 결과 배열에 삽입해야합니다. – Wain

0

감사합니다 @Wain 및 @Hinata Hyuga.I는 제안의 도움으로 배열에 문자열을 변환하는 작업을 할 코드를 알아 냈어.

다음은 코드 대신

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; 
관련 문제