皆さん、下は私が学校の課題に使用したコードの一部です。O(大文字のo)を含む単語を入力すると、失敗します。このプログラムに1つ以上の大文字のOがある場合は常に、falseを返し、ログに記録します。文は回文ではありません。
回文は、回文が何であるかを知らない人々にとって、右から左、そして後ろに同じように読まれる単語です。(例:笑、カヤック、リバイバーなど)これまでに見つかった「最も古い」回文をチェックしようとしたときにこのバグを見つけました:SATOR AREPO TENETOPERAROTAS。
すべて大文字のoを小文字のoに変更すると、機能し、trueを返します。このコードでは、大文字のOが付いたすべての文/単語がfalseを返します。このプログラムを失敗させるには、大文字の1つで十分です。
-(BOOL)testForPalindrome:(NSString *)s position:(NSInteger)pos {
NSString *string = s;
NSInteger position = pos;
NSInteger stringLength = [string length];
NSString *charOne = [string substringFromIndex:position];
charOne = [charOne substringToIndex:1];
NSString *charTwo = [string substringFromIndex:(stringLength - 1 - position)];
charTwo = [charTwo substringToIndex:1];
if(position > (stringLength / 2)) {
NSString *printableString = [NSString stringWithFormat:@"De following word or sentence is a palindrome: \n\n%@", string];
NSLog(@"%@ is a palindrome.", string);
[textField setStringValue:printableString];
return YES;
}
if(charOne != charTwo) {
NSLog(@"%@, %@", charOne, charTwo);
NSLog(@"%i", position);
NSLog(@"%@ is not a palindrome.", string);
return NO;
}
return [self testForPalindrome:string position:position+1];
}
それで、これはココアの奇妙なバグですか?それとも私は何かが足りないのですか?
- B