Пытаюсь работать с NSString, но у меня возникают проблемы при сравнении двух строк - PullRequest
0 голосов
/ 20 марта 2012

У меня есть простая программа, в которой я тестирую класс принтера.

-(void) setInkType {
    NSMutableString *theInkType;
    InkType typeOfInk;
    char inkFromInput[50];

    NSLog(@"What type of ink are you using?");
    NSLog(@"Options are photoInk, lazerJet, regularInk");
    fgets(inkFromInput,50,stdin);
    theInkType = [[NSMutableString alloc] initWithUTF8String:inkFromInput];
    NSLog(@"%@",theInkType);

    if([theInkType compare: @"photoInk"]==true) {
        typeOfInk.photoInk = 564;
        NSLog(@"Your using a photo ink of type %d",typeOfInk.photoInk);
        inkType.photoInk = typeOfInk.photoInk;
    }
    else { if ([theInkType compare: @"lazerJet"] == true) {
        typeOfInk.lazerJet = 94;
        NSLog(@"Your using a lazer toner of type %d",typeOfInk.lazerJet);
        inkType.lazerJet = typeOfInk.lazerJet;
    }

    else { if  ([theInkType compare: @"regularInk"] == true) {
        typeOfInk.regularInk = 910;
        NSLog(@"Your using a regular ink of type %d",typeOfInk.regularInk);
        inkType.regularInk = typeOfInk.regularInk;
            }
        }       
    }
}

Когда я запускаю это, я могу войти в "photoInk" и "lazerInk", и я получаю правильный вывод.Почему, когда я набираю «normalInk», я получаю неправильный вывод?

Я думаю, что это могут быть мои {}, но я не совсем уверен.Я уже несколько часов чесал голову.

Если есть больше вкуса какао, я могу сделать его более гладким, дайте мне знать, пожалуйста.

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

-compare: не возвращает логическое значение true / false, он возвращает NSComparisonResult, который равен либо NSOrderedAscending, NSOrderedSame, либо NSOrderedDescending.

.this:

if ([theInkType compare: @"photoInk"] == NSOrderedSame)

Но на самом деле, метод -isEqual: ближе к вашему истинному намерению.

if ([theInkType isEqual: @"photoInk"])

Также: вы неправильно выполняете свои пункты else.Не это:

if (x) {
    ...
}
else { if (y) {
    ...
} }

Но это:

if (x) {
    ...
} else if (y) {
    ...
}
0 голосов
/ 20 марта 2012

Я думаю, это должно сработать для вас. Это мой ответ, который я взял по ссылке:

Сравнение текста в UITextView?

РЕШЕНИЕ-1: Я немного изменил его, чтобы вам было проще:

Предположим, что String1 - это одна строка NSString.

 //Though this is a case sensitive comparison of string
 BOOL boolVal = [String1 isEqualToString:@"My Default Text"];

 //Here is how you can do case insensitive comparison of string:
 NSComparisonResult boolVal = [String1 compare:@"My Default Text" options:NSCaseInsensitiveSearch]; 

 if(boolVal == NSOrderedSame)
 {
     NSLog(@"Strings are same");
 }
 else
 {
     NSLog(@"Strings are Different");
 }

Здесь, если boolVal - NSOrderedSame, вы можете сказать, что строки одинаковы, иначе они разные.

РЕШЕНИЕ-2: Также вы не находите это легким, вы можете обратиться к ответу Macmade по той же ссылке.

Надеюсь, это поможет вам.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...