私はObjective C(Javaからのもの)から始めたばかりで、構文といくつかの基本的なことを練習するためだけに電卓プログラムに取り組んでいます。私が行っている方法は、ユーザーに文字列を入力させ、演算子を調べて(操作の順序を考慮して)、その演算子を囲む用語を見つけて計算し、用語を答えに置き換え、繰り返しますすべての用語; ただし、用語の計算に使用している方法に問題があります。演算子のインデックスを渡し、別の演算子にヒットするまで逆方向にループして、その直前の番号を見つけ、その後の番号に対して同じ順方向を実行します。私の問題は、ループが演算子にヒットしても停止せず、代わりに両方向の文字列の終わりまで続くことです。これ' これはおそらく私が見落としていた非常に単純なことですが、しばらくの間これを理解しようとしてきましたが、それを理解できないようです. あらかじめ決められた文字列と演算子のインデックスを使用して、メソッドの前半だけの 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;
}