2013-04-24 27 views
5

Có cách nào tương đối dễ dàng để sử dụng toán tử toán học với các biến chuỗi trong Mục tiêu C không?Hoạt động c mục tiêu với các biến số

Ví dụ:

Chuỗi "x * x" nên trở về "x^2"

Chuỗi "x/x" nên trở về "1"

Tôi đang tìm cái gì đó thực sự sẽ sử dụng tên biến "x" mà không có giá trị số được gán và trả về một câu trả lời dưới dạng "x".

+1

Bạn cần một khuôn khổ phân tích cú pháp toán học, hãy nhìn vào [DDMathParser] (https://github.com/davedelong/DDMathParser) hoặc [GCMathParser] (http://apptree.net/parser.htm) ... – aleroot

+0

Ngay cả điều này sẽ không yêu cầu –

+0

Cần phải phức tạp đến mức nào? Liệu nó chỉ cần xử lý đa thức với đồng hiệu quả thực? Nếu vậy, nó sẽ không mất quá nhiều thời gian để gõ một cái gì đó khá cơ bản. – occulus

Trả lời

1

Nếu bạn đặt 'x' giá trị như chuỗi sau đó bạn có thể đánh giá nó như:

NSString *[email protected]"3*3"; 
NSExpression *expression = [NSExpression expressionWithFormat:string]; 
float result = [[expression expressionValueWithObject:nil context:nil] floatValue]; 
NSLog(@"%f", result); 

Ngoài ra,

NSString *[email protected]"34*(2.56+1.79)-42/1.5"; 
NSNumber *result=[NSExpression expressionWithFormat:string]; 
NSLog(@"%@", result); 

Thay đổi đối với bất kỳ kiểu dữ liệu float để int vv theo yêu cầu của bạn

+0

điều này sẽ chỉ hoạt động khi x = một số trong ví dụ của tôi, im tìm kiếm cái gì đó thực sự sẽ sử dụng tên biến "x" mà không có giá trị số được gán và trả về câu trả lời "x" – Amendale

+0

. không biết nó tồn tại nhưng tôi nghĩ rằng OP có ý định sử dụng các biến (như '" x "'). Sự hỗ trợ này có chuyển đổi '" x + x + y "' thành '" 2 * x + y "' không? –

+1

@ DavidRönnqvist: Sau đó, chắc chắn một người của DaveDeLong là câu trả lời hay nhất. OP: bạn có thể kiểm tra với DDMathParser, nhưng tôi không nghĩ rằng ngay cả điều đó sẽ giúp bạn. –

1

Tôi đã tìm kiếm một Objective C lib thực hiện thao tác đại số và chưa tìm thấy nhiều.

Vì vậy, đặt cược tốt nhất của bạn có thể là sử dụng thư viện C (Mục tiêu C là một superset của ANSI C, sau khi tất cả, và bạn có thể kết hợp cả hai).

Kiểm tra danh sách các libs toán C:

http://www.mathtools.net/C_C__/Mathematics/

Từ danh sách đó, có vẻ như Mathomatic có thể sử dụng.

Hai chiến lược cho việc sử dụng một thư viện C trong C Mục tiêu của bạn:

  1. Chỉ cần gọi các hàm C từ mã C Mục tiêu của bạn

  2. Tạo một C wrapper Mục tiêu cho các thư viện C và sử dụng (và có thể giải phóng nó cho người khác sử dụng :)

0

Bạn có thể xem thư viện GiNaC (www.ginac.de). Nó là thư viện toán mở. Bạn có thể đơn giản hóa các biểu thức đại số với thư viện này. Và bạn cũng có thể biên dịch nó trên OSX và liên kết nó vào dự án Xcode của bạn giống như một thư viện tĩnh C++. 1. Bạn cần tải xuống Ginac, CLN và Pkg-Config (http://www.freedesktop.org/wiki/Software/pkg-config/). 2. Giải nén và biên dịch PKG-Config trong/usr/thư mục địa phương của bạn 3. Giải nén và biên dịch CLN 4. Giải nén và biên dịch Ginac

Sau đó đi để bạn thiết lập dự án trong Xcode chọn mục tiêu của bạn và đưa các tập tin tiêu đề của bạn đường dẫn đến Đường dẫn Tìm kiếm Tiêu đề trong Cài đặt Xây dựng. Sau đó, vào Build Phases - Link Binary With Libraries bấm "+" và chọn Add Other, sau đó chọn tập tin thư viện đã biên dịch của bạn libginac.a Đó là tất cả những gì tôi nghĩ. Đừng quên đưa tệp ginac.h của bạn vào tệp tiêu đề lớp của bạn.

#include <ginac.h> 
Các vấn đề liên quan