سؤال

مرحبًا يا رفاق ، تحتها جزء من الكود الذي استخدمته في مهمة مدرسية. كلما أدخلت كلمة ، مع O فيها (وهي رأس مال O) ، فإنها تفشل! كلما كان هناك واحد أو أكثر من رأس المال في هذا البرنامج ، فإنه يعيد خطأ وسجلات: الجملة ليست palindrome.

Palindrome ، للأشخاص الذين لا يعرفون ماهية palindrome ، هي كلمة هي نفس القراءة من اليمين ، والخلف. (على سبيل المثال LOL ، Kayak ، Reviver ، إلخ) لقد وجدت هذا الخطأ عند محاولة التحقق من "أقدم" Palindrome على الإطلاق: Sator Arepo Tenet Opera Rotas.

عندما أقوم بتغيير كل رأس المال إلى Sudrase O's ، فإنه يعمل ، ويعيد صحيحًا. اسمحوا لي أن أذكر بوضوح ، مع هذا الجزء من الكود جميع الجمل/الكلمات مع عودة رأس المال O. رأس مال واحد يكفي لفشل هذا البرنامج.

-(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]; 
}

إذن ، هل هذا بعض الأخطاء الغريبة في الكاكاو؟ أم هل فاتني شيء؟

  • ب
هل كانت مفيدة؟

المحلول

هذا بالطبع ليس خطأ في الكاكاو ، كما عرفت على الأرجح في أعماق الداخل.

تسبب طريقة المقارنة الخاصة بك هذه "الخطأ في الكاكاو" ، فأنت تقارن عناوين Charone و Chartwo. بدلاً من ذلك ، يجب عليك مقارنة محتويات السلسلة مع رسالة isequaltostring.

يستخدم:

if(![charOne isEqualToString:charTwo]) {

بدلاً من:

if(charOne != charTwo) {

تحرير: اختباره في مشروع اختبار ويمكن أن يؤكد أن هذه هي المشكلة.

نصائح أخرى

لا تستخدم charOne != charTwo

بدلا من ذلك استخدم أحد NSString مقارنة الأساليب.

if ([charOne caseInsensitiveCompare:charTwo] != NSOrderedSame)

قد يكون له علاقة مع التوطين (لكني أشك في ذلك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top