1 comparison predicate objective-c nsstring ios
我有一个NSString query,其中包含~10个字符.
我想检查一下,调用的第二个NSString是否word包含所有字符query或某些字符,但没有其他未指定的字符query.
此外,如果查询中只出现一个字符,则该字中只能出现一个字符.
请问你能告诉我怎么做吗?
NSString *query = @"ABCDEFJAKSUSHFKLAFIE";
NSString *word = @"fearing"; //would pass as NO as there is no 'n' in the query var.
Run Code Online (Sandbox Code Playgroud)
以下是上半部分的答案:
NSCharacterSet *nonQueryChars = [[NSCharacterSet characterSetWithCharactersInString:[query lowercaseString]] invertedSet];
NSRange badCharRange = [[word lowercaseString] rangeOfCharacterFromSet:nonQueryChars];
if (badCharRange.location == NSNotFound) {
// word only has characters in query
} else {
// found unwanted characters in word
}
Run Code Online (Sandbox Code Playgroud)
我需要考虑下半部分的要求.
好的,以下代码应满足这两个要求:
- (NSCountedSet *)wordLetters:(NSString *)text {
NSCountedSet *res = [NSCountedSet set];
for (NSUInteger i = 0; i < text.length; i++) {
[res addObject:[text substringWithRange:NSMakeRange(i, 1)]];
}
return res;
}
- (void)checkWordAgainstQuery {
NSString *query = @"ABCDEFJAKSUSHFKLAFIE";
NSString *word = @"fearing";
NSCountedSet *queryLetters = [self wordLetters:[query lowercaseString]];
NSCountedSet *wordLetters = [self wordLetters:[word lowercaseString]];
BOOL ok = YES;
for (NSString *wordLetter in wordLetters) {
int wordCount = [wordLetters countForObject:wordLetter];
// queryCount will be 0 if this word letter isn't in query
int queryCount = [queryLetters countForObject:wordLetter];
if (wordCount > queryCount) {
ok = NO;
break;
}
}
if (ok) {
// word matches against query
} else {
// word has extra letter or too many of a matching letter
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1282 次 |
| 最近记录: |