私は悪名高いスタンフォード電卓の課題に取り組んでいます。102.3.79 のような数値を処理できるように、入力された数値が有効な float 値であることを確認する必要があります。
文字列のピリオドを数える小さなループを書かなくても済むようにするには、組み込み関数が必要です。
私は悪名高いスタンフォード電卓の課題に取り組んでいます。102.3.79 のような数値を処理できるように、入力された数値が有効な float 値であることを確認する必要があります。
文字列のピリオドを数える小さなループを書かなくても済むようにするには、組み込み関数が必要です。
C 標準ライブラリ関数を使用できますstrtod()
。エラーが発生したところで停止し、それに応じて出力引数を設定します。この事実を次のように利用できます。
- (BOOL)isValidFloatString:(NSString *)str
{
const char *s = str.UTF8String;
char *end;
strtod(s, &end);
return !end[0];
}
-(BOOL) isNumeric:(NSString*)string {
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:string];
[formatter release]; // if using ARC remove this line
return number!=nil;
}
-(BOOL) isFloat:(NSString*)string {
NSScanner *scanner = [NSScanner scannerWithString:string];
[scanner scanFloat:NULL];
return [scanner isAtEnd];
}
@"."
文字列をカウントするためのかなり洗練されたソリューションが少なくとも 1 つあります。
NSString *input = @"102.3.79";
if([[input componentsSeparatedByString:@"."] count] > 2) {
NSLog(@"input has too many points!");
}
もう少し深く掘り下げます... 文字列全体を数値として検証する場合は、NSNumberFormatter
and 呼び出しを構成してみてくださいnumberFromString:
( NSNumberFormatter ドキュメント)。
CS193P を経験したので、C の使用と C の使用に慣れることが目的だと思いますNSString
。ボタンが押され、数字 1 を連結して使用し、2 を表示するため UILabel
、単純な小数点フラグを検討します。BOOL
これは、数値の末尾に小数点をぶら下げたり、ユーザーが数値をバックスペースできるようにするなど、他のチェックを行うときにも便利です。
たとえば編集:
各数字ボタンに接続された IBAction を作成します。
- (IBAction)numberButtonPressed:(UIButton *)sender
{
if([sender.titleLabel.text isEqualToString:@"."])
{
if (!self.inTheMiddleOfEnteringANumber)
self.display.text=[NSString stringWithString:@"0."];
else if (!self.decimalPointEntered)
{
self.display.text=[self.display.text stringByAppendingString:sender.titleLabel.text];
self.decimalPointEntered=TRUE;
}
}
self.inTheMiddleOfEnteringANumber=TRUE;
}