Цель-C: найти согласные в строке - PullRequest
2 голосов
/ 22 октября 2011

У меня есть строка, содержащая слова с согласными и гласными. Как я могу извлечь только согласные из строки?

NSString *str = @"consonants.";

Результат должен быть:

cnsnnts

Ответы [ 4 ]

3 голосов
/ 22 октября 2011

Вы можете создать набор символов со всеми гласными (@ "aeiouy")

+ (id)characterSetWithCharactersInString:(NSString *)aString

, а затем использовать метод

- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set

.

РЕДАКТИРОВАТЬ: Это удалит только гласные в начале и конце строки, как указано в другом посте, вместо этого вы можете использовать

- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator

, затем вставить компоненты обратновсе вместе.Вам также может понадобиться включить в набор заглавные версии гласных, и если вы хотите также иметь дело с ударениями (например, и т. Д.), Вам, вероятно, придется включить это также.

2 голосов
/ 22 октября 2011

К сожалению stringByTrimmingCharactersInSet не будет работать, так как он обрезает только начальные и конечные символы, но вы можете попробовать использовать регулярное выражение и подстановку следующим образом:

[[NSRegularExpression
  regularExpressionWithPattern:@"[^bcdefghjklmnpqrstvwx]"
  options:NSRegularExpressionCaseInsensitive
  error:NULL]
 stringByReplacingMatchesInString:str
 options:0
 range:NSMakeRange(0, [str length])
 withTemplate:@""]

Вы, вероятно, хотите настроить регулярное выражение и параметры для своих нужд.

0 голосов
/ 22 октября 2011

Вот категория NSString, которая выполняет эту работу:

- (NSString *)consonants
{
    NSString *result = [NSString stringWithString:self];
    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"aeiou"];

    while(1)
    {
        NSRange range = [result rangeOfCharacterFromSet:characterSet options:NSCaseInsensitiveSearch];
        if(range.location == NSNotFound)
            break;

        result = [result stringByReplacingCharactersInRange:range withString:@""];
    }


    return result;
}
0 голосов
/ 22 октября 2011

Возможно, конечно, не оптимальное решение.Я печатаю промежуточные результаты для вашего обучения.Позаботьтесь о распределении памяти (мне было все равно).Надеюсь, кто-нибудь пришлет вам лучшее решение, но вы можете скопировать и вставить его на данный момент.

NSString *test = @"Try to get all consonants";
NSMutableString *found = [[NSMutableString alloc] init];
NSInteger loc = 0;
NSCharacterSet *consonants = [NSCharacterSet characterSetWithCharactersInString:@"bcdfghjklmnpqrstvwxyz"];
while(loc!=NSNotFound && loc<[test length]) {
    NSRange r = [[test lowercaseString] rangeOfCharacterFromSet:consonants options:0 range:NSMakeRange(loc, [test length]-loc)];
    if(r.location!=NSNotFound) {
        NSString *temp = [test substringWithRange:r];
        NSLog(@"Range: %@ Temp: %@",NSStringFromRange(r), temp);
        [found appendString:temp];
        loc=r.location+r.length;
    } else {
        loc=NSNotFound;
    }
}

NSLog(@"Found: %@",found);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...