iOS開發(fā)實現(xiàn)計算器功能
更新時間:2021年10月10日 12:28:35 作者:Billy Miracle
這篇文章主要為大家詳細介紹了iOS開發(fā)實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了iOS實現(xiàn)計算器功能的具體代碼,供大家參考,具體內(nèi)容如下
效果圖
Masonry
使用數(shù)組來自動約束
NSArray *buttonArrayOne = @[_buttonAC, _buttonLeftBracket, _buttonRightBracket, _buttonDivide]; //withFixedSpacing: 每個view中間的間距 //leadSpacing: 左最開始的間距 //tailSpacing:; 右邊最后的的間距 [buttonArrayOne mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:15 leadSpacing:15 tailSpacing:15]; [buttonArrayOne mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(@(selfHeight - (buttonHeight * 5 + 110))); make.height.equalTo(@(buttonHeight)); }];
對最后一行單獨處理
[_buttonZero mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(@15); make.top.equalTo(@(selfHeight - (buttonHeight + 50))); make.width.equalTo(@(buttonWidth * 2 + 15)); make.height.equalTo(@(buttonHeight)); }]; [_buttonZero.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(_buttonOne.titleLabel); }]; //使0的數(shù)字對齊
計算部分:
+ (Result)CalculateFor:(char*) formula andLen: (long) length { Result result = {0, 0.0f}; int numberOfDots = 0; int index; int digitsNum = 0; float digits[CALCULATE_MAX_DIGITS]; memset(digits, 0, sizeof(digits)); int optNum = 0; char operator[CALCULATE_MAX_OPERATOR]; memset(operator, 0, sizeof(operator)); int digitNum = 0; char digit[CALCULATE_MAX_DIGIT]; memset(digit, 0, sizeof(digit)); char *p = formula; while (length--) { switch (*p) { case '+': case '-': case '*': case '/': numberOfDots = 0; if (0 == digitNum && '-' == *p) { digit[digitNum++] = *p; } else { if (-1 == digitNum) { //剛計算過括號,符號前可以沒有數(shù)字讀入 } else if (0 == digitNum || CALCULATE_MAX_DIGITS == digitsNum - 1) { result.error = CALCULATE_ERR; return result; } else { digits[digitsNum++] = atof(digit); memset(digit, '\0', sizeof(digit)); } digitNum = 0; operator[optNum++] = *p; } break; case '(': { char *pointer_son; int ExistEnd = 0; pointer_son = ++p; while(length--) { if ('(' == *p) { ExistEnd--; } else if (')' == *p) { ExistEnd++; } if (1 == ExistEnd) { break; } p++; } Result result_son = [self CalculateFor:pointer_son andLen:p - pointer_son]; if (CALCULATE_ERR == result_son.error) { result.error = result_son.error; return result; } digits[digitsNum++] = result_son.value; memset(digit, 0, sizeof(digit)); digitNum = -1; break; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': digit[digitNum++] = *p; if (numberOfDots == 0 && *p == '.') { numberOfDots = 1; } else if (numberOfDots == 1 && *p == '.') { result.error = CALCULATE_ERR; return result; } break; default: result.error = CALCULATE_ERR; return result; } if (0 == length && 0 < digitNum) { digits[digitsNum++] = atof(digit); memset(digit, 0, sizeof(digit)); digitNum = 0; } p ++; } if (digitsNum != optNum + 1) { result.error = CALCULATE_ERR; return result; } for (index = 0; index < optNum; index ++) { if ('*' == operator[index]) { digits[index + 1] = digits[index] * digits[index + 1]; digits[index] = 0; operator[index] = '?'; } else if ('/' == operator[index]) { if (digits[index + 1] == 0) { result.error = CALCULATE_ERR; return result; } digits[index + 1] = digits[index] / digits[index + 1]; digits[index] = 0; operator[index] = '?'; } } for (index = 0; index < optNum; index ++) { if ('?' == operator[index]) { if (0 == index) { operator[index] = '+'; } else { operator[index] = operator[index - 1]; } } } result.value = digits[0]; for (index = 0; index < optNum; index ++) { if ('+' == operator[index]) { result.value += digits[index + 1]; } else if ('-' == operator[index]) { result.value -= digits[index + 1]; } } return result; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解iOS開發(fā)中Keychain的相關(guān)使用
這篇文章主要介紹了iOS開發(fā)中Keychain的相關(guān)使用,文中列舉了一個使用Keychain來保存密碼的例子,需要的朋友可以參考下2015-10-10iOS 泛型中nullable、null resettable、null kindof 用法詳解
這篇文章主要介紹了iOS 泛型中nullable、null resettable、null kindof 用法詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09iOS實現(xiàn)自定義購物車角標(biāo)顯示購物數(shù)量(添加商品時角標(biāo)抖動 Vie)
本文主要介紹了iOS實現(xiàn)自定義購物車及角標(biāo)顯示購物數(shù)量(添加商品時角標(biāo)抖動 Vie)的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04iOS和JS交互教程之WKWebView-協(xié)議攔截詳解
這篇文章主要給大家介紹了關(guān)于iOS和JS交互教程之WKWebView-協(xié)議攔截的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09