ios objective-c ios5 nsstring nsinteger

¿Cómo evaluar la ecuación de cadena en ios?



objective-c ios5 (6)

¿Hay manera de resolver las ecuaciones de cadena en ios ?

Por ejemplo

Entrada:

NSString * str =@"1+2";

Salida:

NSInteger result = 3 // es decir, suma de 1 + 2 de str

¡Cómo hacer esto y obtener el resultado esperado!

¡Por favor ayuda!


Creo que necesitas subString tu cadena y almacenar cada número en una nueva NSstring (integerValue) o en una variable Integer .

ejemplo:

NSString *str = @"1+2"; int x = [[str substringToIndex:1]integerValue]; int y = [[str substringFromIndex:1]integerValue]; int z = x+y; NSLog(@"Sum === %d",z);


Depende de la complejidad de las ecuaciones de su cadena de entrada. Puede usar el algoritmo de Shunting-yard para analizar ecuaciones matemáticas y luego calcular la ecuación a partir del Abstract Syntact Tree (AST)

Pero espero que estés buscando alguna solución fácil, preferiblemente ya hecha. En ese caso, puedes probar uno de estos (no hay garantía, no los he probado, solo he buscado en Google):


Lo que puede hacer es, puede obtener los componentes de la cadena separados por el signo "+" utilizando este método y luego obtendrá la matriz de componentes, es decir, 1,2.

NSArray* foo = [str componentsSeparatedByString: @"+"];

int result = [[foo objectAtIndex:0] integerValue] + [[foo objectAtIndex:1] integerValue];

y luego puede usar el valor entero para esos dos elementos y agregarlos y almacenar el resultado en una variable entera.


Puedes usar NSExpression para esto:

NSExpression *expression = [NSExpression expressionWithFormat:@"1+2"]; NSLog(@"%@", [expression expressionValueWithObject:nil context:nil]);

Para más información lea la documentación de los métodos utilizados.


Si sus expresiones matemáticas son lo suficientemente simples, puede seguir la ruta manual como lo sugiere Rajan Balana.

Para evaluar expresiones más complejas, puede usar / abuse de NSPredicate en combinación con NSExpression como se describe en esta publicación del blog: http://funwithobjc.tumblr.com/post/1553469975/abusing-nspredicate

Tenga en cuenta que NSPredicate solo es necesario si su entrada es realmente una ecuación (incluida la parte correcta):

NSPredicate* parsedExpression = [NSPredicate predicateWithFormat:@"1+2=x"]; NSExpression* leftPart = [(NSComparisonPredicate*)parsedExpression leftExpression]; NSNumber* evaluatedResult = [leftPart expressionValueWithObject:nil context:nil]; NSLog(@"Expr:%@", evaluatedResult);

Para lograr un análisis adecuado, puede usar uno de los analizadores matemáticos para Objective-C. Yo no los he usado, pero los populares parecen ser


Utilizar esta :

NSString * str =@"1+2"; NSArray *arr = [str componentsSeparatedByString:@"+"]; int sum = 0; for (int i = 0; i < [arr count]; i++) { sum += [[arr objectAtIndex:i] intValue]; } NSLog(@"sum : %d",sum);

Salida: suma = 6

Puedes usar NSExpression también.

Las expresiones son el núcleo de la implementación del predicado. Cuando se llama a expressionValueWithObject: la expresión se evalúa y se devuelve un valor que luego puede ser manejado por un operador. Las expresiones pueden ser desde constantes hasta invocaciones de métodos. Los escalares deben envolverse en las clases apropiadas de NSValue.

Ejemplo:

NSLog(@"sum : %@", [[NSExpression expressionWithFormat:@"1+4"] expressionValueWithObject:nil context:nil]); Output :- sum : 5 NSLog(@"mulitple : %@", [[NSExpression expressionWithFormat:@"2*4"] expressionValueWithObject:nil context:nil]); Output :- mulitple : 8

Espero que te ayude.