Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从字符串中去掉元音 NSMutableString*stringa=[[NSMutableString alloc]initWithFormat:@“%@”,namesfield.text]; 如果([stringa长度]_Iphone_Objective C_Nsrange - Fatal编程技术网

Iphone 从字符串中去掉元音 NSMutableString*stringa=[[NSMutableString alloc]initWithFormat:@“%@”,namesfield.text]; 如果([stringa长度]

Iphone 从字符串中去掉元音 NSMutableString*stringa=[[NSMutableString alloc]initWithFormat:@“%@”,namesfield.text]; 如果([stringa长度],iphone,objective-c,nsrange,Iphone,Objective C,Nsrange,cfField.text的结果总是带有元音的辅音,而结果只能是辅音。我不知道。在循环的每次迭代中,您都在测试整个字符串中是否存在元音,因此您将始终依次添加每个字符 在for循环中,您需要以下代码: NSMutableString *stringa = [[NSMutableString alloc] initWithFormat:@"%@", surnameField.text]; if ([stringa length] < 3) { [stringa appendString

cfField.text的结果总是带有元音的辅音,而结果只能是辅音。我不知道。

在循环的每次迭代中,您都在测试整个字符串中是否存在元音,因此您将始终依次添加每个字符

在for循环中,您需要以下代码:

NSMutableString *stringa = [[NSMutableString alloc] initWithFormat:@"%@", surnameField.text];

if ([stringa length] < 3) {
    [stringa appendString:@"x"];
}

NSMutableString *consonanti = [[NSMutableString alloc] init];

NSCharacterSet *vocali = [NSCharacterSet characterSetWithCharactersInString:@"aeiouàèìòùáéíóúAEIOUÀÈÌÒÙÁÉÍÓÚ"];

NSRange r;

for (int i=0; i < [stringa length]; i++) {

    r = [stringa rangeOfCharacterFromSet:vocali];

    if (r.location != NSNotFound) {
        [consonanti appendFormat:@"%c",[stringa characterAtIndex:i]];
    }
    else {
    }
}

cfField.text = consonanti;
[stringa release];
[consonanti release];

这将检查单个字符是否不在元音字符集中,并将其添加到可变字符串中

在循环的每次迭代中,您都在测试整个字符串中是否存在元音,因此始终会依次添加每个字符

在for循环中,您需要以下代码:

NSMutableString *stringa = [[NSMutableString alloc] initWithFormat:@"%@", surnameField.text];

if ([stringa length] < 3) {
    [stringa appendString:@"x"];
}

NSMutableString *consonanti = [[NSMutableString alloc] init];

NSCharacterSet *vocali = [NSCharacterSet characterSetWithCharactersInString:@"aeiouàèìòùáéíóúAEIOUÀÈÌÒÙÁÉÍÓÚ"];

NSRange r;

for (int i=0; i < [stringa length]; i++) {

    r = [stringa rangeOfCharacterFromSet:vocali];

    if (r.location != NSNotFound) {
        [consonanti appendFormat:@"%c",[stringa characterAtIndex:i]];
    }
    else {
    }
}

cfField.text = consonanti;
[stringa release];
[consonanti release];

这将检查单个字符是否不在元音字符集中,并将其添加到可变字符串中

请注意,如果使用
characterAtIndex:
访问单个字符,则组合字符将被分解为单个组成部分,例如变音符号

例如,Unicode speak中的变音符号是一种重音,就像元音字符串中的“é”中的重音一样

更好的方法是在字符串的组合字符上迭代字符串:

if(![vocali characterIsMember:[stringa characterAtIndex:i]])
    [consonanti appendFormat:@"%C",[stringa characterAtIndex:i]];

您将看到,此代码段清除了基本元音和变音标记的原始组合字符字符串。

请注意,如果使用
characterAtIndex:
访问单个字符,组合字符将被分解为单个组件,例如变音标记

例如,Unicode speak中的变音符号是一种重音,就像元音字符串中的“é”中的重音一样

更好的方法是在字符串的组合字符上迭代字符串:

if(![vocali characterIsMember:[stringa characterAtIndex:i]])
    [consonanti appendFormat:@"%C",[stringa characterAtIndex:i]];

您将看到,此代码段将清除基本元音和变音符号的原始组合字符字符串。

这也应该有效-首先通过将所有人声用作字符串的拆分字符来去除它们,然后再次连接所有接收到的字符串部分:

// A string with composed diacritic characters
// In clear text it is "Renée Ångström"
NSString *stringWithComposedChars = @"Rene\u0301e A\u030Angstro\u0308m";
NSString *vowels = @"aeiouàèìòùáéíóúäëïöü";

NSMutableString *consonants = [NSMutableString string];

[stringWithComposedChars
 enumerateSubstringsInRange:NSMakeRange(0,[stringWithComposedChars length])
                                        options:NSStringEnumerationByComposedCharacterSequences
                                        usingBlock: ^(NSString *substring,NSRange rng1, NSRange rng2, BOOL *stop)
{
    if ( [vowels rangeOfString:substring options:NSCaseInsensitiveSearch|NSWidthInsensitiveSearch].location == NSNotFound ) {
        [consonants appendString:substring];
    }
}];

NSLog(@"Original string: \"%@\" - Vowels removed: \"%@\"", stringWithComposedChars, consonants);

我不知道性能如何,但它看起来很短:-)。

这也应该有效-首先通过将所有人声用作字符串的拆分字符来删除它们,然后再次连接所有接收到的字符串部分:

// A string with composed diacritic characters
// In clear text it is "Renée Ångström"
NSString *stringWithComposedChars = @"Rene\u0301e A\u030Angstro\u0308m";
NSString *vowels = @"aeiouàèìòùáéíóúäëïöü";

NSMutableString *consonants = [NSMutableString string];

[stringWithComposedChars
 enumerateSubstringsInRange:NSMakeRange(0,[stringWithComposedChars length])
                                        options:NSStringEnumerationByComposedCharacterSequences
                                        usingBlock: ^(NSString *substring,NSRange rng1, NSRange rng2, BOOL *stop)
{
    if ( [vowels rangeOfString:substring options:NSCaseInsensitiveSearch|NSWidthInsensitiveSearch].location == NSNotFound ) {
        [consonants appendString:substring];
    }
}];

NSLog(@"Original string: \"%@\" - Vowels removed: \"%@\"", stringWithComposedChars, consonants);

我不知道性能如何,但它看起来很短:-)。

您可以尝试以下方法:

NSArray*  onlyConsonantsArray  = [stringa componentsSeparatedByCharactersInSet:vocali];
NSString* onlyConsonantsString = [onlyConsonantsArray componentsJoinedByString: @""];

您可以尝试以下方法:

NSArray*  onlyConsonantsArray  = [stringa componentsSeparatedByCharactersInSet:vocali];
NSString* onlyConsonantsString = [onlyConsonantsArray componentsJoinedByString: @""];

你想干什么?从字符串中删除元音?完全重复您要做的事情的可能重复?从字符串中删除元音?可能重复的
%c
的精确副本是单个c
字符的格式说明符。您必须使用
%C
来创建
unichar
%C
是单个C
字符的格式说明符。您必须使用
%C
创建
unichar