我剛剛從客觀的c(來自java)開始,我正在研究一個計算器程序,只是爲了練習語法和一些基本的東西。我要做的方式是讓用戶輸入一個字符串並查找操作員(考慮操作順序),然後找到圍繞該操作員的術語,計算它,用答案替換該術語,然後重複所有條款;不過,我正在使用我用來計算該術語的方法存在問題。我傳入運營商的索引並讓它向後循環,直到它擊中另一個運營商以找到它之前的號碼,並在之後爲該號碼執行相同的轉發。我的問題是,循環不會停止時,它擊中操作員,而是繼續,直到字符串在兩個方向的結束。這可能很簡單,我忽略了,但我一直試圖弄清楚這一點,可以'似乎得到它。我已經在方法的前半部分包含了一個SSCCE,其中包含預定義的字符串和操作符索引。 (另外,二次的問題:有沒有更好的方式在本網站發佈的代碼塊,而不是在4位的每行前手動放?)Objective C:循環問題
#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;
}
「有沒有更好的方法在本站上發佈代碼塊,而不是在每行之前手動放置4個空格?」 - 把它寫在代碼編輯器中,全選,打TAB。另外,+1是一個很好的問題,並感謝您爲編碼格式化所做的努力!旁註:難道你不想正確地將字符串解析爲AST嗎?會更清潔。 – 2012-11-20 18:00:06
我不確定這是否是問題,但是...... Objective-C中字符串比較的第一條規則是:使用'isEqualToString:'而不是'=='和'!='運算符。字符串是對象,操作符只測試對象地址,而不是內容。 –
@PhillipMills斑點。這個問題寫得非常好,我甚至沒有注意到noob錯誤;) – 2012-11-20 18:03:19