2011-07-13 31 views
4

嗨,大家好我如何分隔一个字符串,例如:example,并生成summation sumatory 为每个字母定义的值[a = 1,b = 2,c = 3,.. z = 26] 谢谢!ios obj将单独的字符串转换为字符并添加字母

+1

是什么sumatory ? – 2011-07-13 12:59:15

+0

哈哈对不起,字固定! – MaKo

+0

如果角色不在a到z或A到Z之间,那么该怎么办?并且它是不区分大小写的? –

回答

9

您可以使用characterAtIndex从字符串中提取特定字符,例如,

[myString characterAtIndex:1] 

或者遍历所有:

for (int i=0; i < [myString length]; i++) { 
    ... [myString characterAtIndex:i] 
    // You can then decide how to assign a value to each individual string, via a switch. 

} 
7

这里是一个办法这样做:

NSMutableArray *chars = [NSMutableArray arrayWithCapacity:26]; 
// fill the array 
unsigned int i; 
for(i = 0; i < 26; i++) { 
    NSString *s = [NSString stringWithFormat:@"%c", (i+65)]; 
    [chars addObject:s]; 
} 
// now you have [0:"a", 1:"b", ..., 25:"z"] 
NSUInteger sum = 0; 
NSString lowerCaseString = [myString lowerCaseString]; 
for (int i=0; i < [myString length]; i++) { 
    NSString *character = [lowerCaseString substringWithRange:NSMakeRange(i, 1)]; 
    // edit thanks to mortenfast ;-) 
    NSUInteger pos = [chars indexOfObject:character]; 
    if(pos != NSNotFound) { 
     sum += (pos+1); 
    } 
} 
+0

在添加到'sum'变量之前检查'[chars indexOfObject:]'返回'NSNotFound'是个好主意,以防它不是a-z之间的字符。 –

+0

@mortenfast,你是完全正确的,我认为源字符串只是从'a'到'z'的字符,但是我会更新这个帖子。谢谢 – 2011-07-13 13:25:29

+0

@mortenfast这种方式,它也防止添加任何东西的总和(或至少尝试)如果字符不是从'a'到'z'的字母遇到 – 2011-07-13 13:32:20

3

适用于iOS 4.0块版本:

__block int sum = 0; 
NSString *string = [NSString stringWithString:@"abcdefghijklmnopqrstuvwxyz"]; 
[string enumerateSubstringsInRange:NSMakeRange(0,[string length]) 
          options:NSStringEnumerationByComposedCharacterSequences 
         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 

    // 'a'=97=0x61=01100001, 'A'=65=0x41=01000001 
    // 26 letters and 2^5-1=31 so only 5 lower bits needed 
    sum += [substring characterAtIndex:0] & 0x1F; 

    // which is the same as 
    // sum += [substring characterAtIndex:0] -'a'+1; 

}]; 
+1

好例子谢谢 – MaKo