我刚从objective c(来自java)开始,我正在开发一个计算器程序,只是为了练习语法和一些基本的东西。我的方法是让用户输入一个字符串并查找运算符(考虑操作顺序),然后找到围绕该运算符的术语,计算它,用答案替换术语,然后重复所有条款;但是,我用于计算术语的方法存在问题。我传入运算符的索引并让它向后循环,直到它碰到另一个运算符以找到它之前的数字,并对后面的数字执行相同的转发。我的问题是循环在遇到运算符时不会停止,而是会一直持续到两个方向的字符串末尾。它' s 可能是我忽略的非常简单的事情,但我一直试图弄清楚这一点,但似乎无法理解。我只包含了该方法前半部分的 SSCCE,其中包含预定的字符串和运算符索引。(还有一个次要问题:有没有更好的方法在这个网站上发布代码块,而不是在每行之前手动放置 4 个空格?)
#import <Foundation/Foundation.h>
int firstNumInTerm(int index);
NSString *calculation;
int main(int argc, const char * argv[])
{
@autoreleasepool {
calculation = @"51-43+378*32";
int firstNumber = firstNumInTerm(9);
NSLog(@"The number before the term is: %i", firstNumber);
}
return 0;
}
int firstNumInTerm(int index){
int firstNumIndex = index - 1;
int firstNumLength = 1;
NSRange prevChar = NSMakeRange(firstNumIndex - 1, 1);
while ([calculation substringWithRange:prevChar] != @"*" &&
[calculation substringWithRange:prevChar] != @"/" &&
[calculation substringWithRange:prevChar] != @"+" &&
[calculation substringWithRange:prevChar] != @"-" &&
firstNumIndex > 0) {
NSLog(@"prevChar: %@", [calculation substringWithRange:prevChar]);//TEST
firstNumIndex--; firstNumLength++;
prevChar = NSMakeRange(firstNumIndex - 1, 1);
}
NSRange firstRange = NSMakeRange(firstNumIndex, firstNumLength);
int firstNum = [[calculation substringWithRange:firstRange] intValue];
NSLog(@"firstNum String: %@", [calculation substringWithRange:firstRange]);//TEST
NSLog(@"firstNum int: %i", firstNum);//TEST
return firstNum;
}