當前位置:成語大全網 - 新華字典 - OC中 怎麽讓@"aaabbccccdd"輸出成@"3a2b4c2d" 求大大們看看。

OC中 怎麽讓@"aaabbccccdd"輸出成@"3a2b4c2d" 求大大們看看。

妳的意思是輸出的格式是“字符個數+該字符”吧。

思路就不說了,直接上代碼吧。

NSString?*?string?=?@"aaabbccccdd";

NSMutableSet?*?set?=?[[NSMutableSet?alloc]?init];

//?遍歷字符串,按字符來遍歷。每個字符將通過block參數中的substring傳出

[string?enumerateSubstringsInRange:NSMakeRange(0,?string.length)?options:NSStringEnumerationByComposedCharacterSequences?usingBlock:^(NSString?*substring,?NSRange?substringRange,?NSRange?enclosingRange,?BOOL?*stop)?{

//?使用集合來排除多余的substring,因為集合中的元素不能重復出現

[set?addObject:substring];

}];

//?用集合初始化壹個字典,字典的key是集合中的元素,比如@"a",value是@"a"的數組,比如@[@"a",@"a",@"a"]

NSMutableDictionary?*?dictionary?=?[[NSMutableDictionary?alloc]?initWithCapacity:0];

//?遍歷集合

[set?enumerateObjectsUsingBlock:^(id?obj,?BOOL?*stop)?{

NSMutableArray?*?array?=?[NSMutableArray?arrayWithCapacity:0];

//?為字典加入空數組

[dictionary?setObject:array?forKey:obj];

}];

//?現在為字典中的array賦值

//?再次遍歷字符串中的字符

[string?enumerateSubstringsInRange:NSMakeRange(0,?string.length)?options:NSStringEnumerationByComposedCharacterSequences?usingBlock:^(NSString?*substring,?NSRange?substringRange,?NSRange?enclosingRange,?BOOL?*stop)?{

//?找到字典中對應的數組

NSMutableArray?*?array?=?[dictionary?objectForKey:substring];

//?添加進數組

[array?addObject:substring];

}];

//?現在可以開始構造我們的輸出字符串了

NSMutableString?*?mutableString?=?[[NSMutableString?alloc]?init];

//?遍歷字典

[dictionary?enumerateKeysAndObjectsUsingBlock:^(id?key,?id?obj,?BOOL?*stop)?{

NSMutableArray?*?array?=?obj;

[mutableString?appendFormat:@"%d%@",array.count,key];

}];

//?打印輸出字符串

NSLog(@"%@",mutableString);

//?主意到輸出的順序是不對的,因為字典是無序的。所以我們應該再用字典來初始化壹個數組,對數組進行排序,然後再輸出結果

NSMutableArray?*?characterArray?=?[NSMutableArray?arrayWithCapacity:0];

//?再對應壹個個數的數組

NSMutableArray?*?numberArray?=?[NSMutableArray?arrayWithCapacity:0];

[dictionary?enumerateKeysAndObjectsUsingBlock:^(id?key,?id?obj,?BOOL?*stop)?{

[characterArray?addObject:key];

}];

//?排序

[characterArray?sortUsingSelector:@selector(compare:)];

//?遍歷characterArray,用字典中對應的元素來構造對應的numberArray

for?(NSString?*?subStr?in?characterArray)?{

NSArray?*?array?=?[dictionary?objectForKey:subStr];

[numberArray?addObject:[NSNumber?numberWithInt:array.count]];

}

//?現在,characterArray中就是放的@"a",@"b",@"c",@"d"

//?numberArray中放的是對應的個數

//?重新構造我們的輸出字符串

mutableString?=?[[NSMutableString?alloc]?init];

for?(int?i?=?0;?i?<?characterArray.count;?i++)?{

[mutableString?appendFormat:@"%@%@",[numberArray?objectAtIndex:i],[characterArray?objectAtIndex:i]];

}

NSLog(@"%@",mutableString);

大部分思路都在註釋裏面,有不清楚的地方,在對應的步驟那裏答應對應的對象就是了,算法不是很復雜。輸出3a2b4c2d