问题描述:
列出字符串中字符及其出现的次数
思路:
参照选择排序,使用双层嵌套for循环
分别取出外层循环的每个字符与内层循环的字符比较,记录相同的次数
使用字典将字符及对应的次数存储
如果只显示次数最多的字符及次数,可以只使用字典的一个元素,在外层循环中进行次数比较,并保存最多次数的字符及次数
#import <Foundation/Foundation.h>
void searchString_count(NSString *string);
void searchEachString_count(NSString *string);
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *s = @"abc123abcaa";
searchString_count(s);
searchEachString_count(s);
}
return 0;
}
// 一、输出字符串中出现次数最多的字符及其次数
void searchString_count(NSString *string) {
// 1.获取字符串长度
int len = (int)string.length;
// 2.创建字典
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// 3.for循环取出每一个字符
for (int i=0; i<len; i++) {
// 4.计数器,存储字符出现的次数
int count = 0;
// 5.取出单个字符
NSRange range = {i,1};
NSString *s = [string substringWithRange:range];
// 6.内层循环,比较字符,相同时,计数器+1
for (int j=0; j<len; j++) {
// 7.取出单个字符
NSRange range = {j,1};
NSString *c = [string substringWithRange:range];
// 8.字符比较
if ([s isEqualToString:c]) {
count++;
}
}
// 9.保存最大值的计数器及对应的字符到字典
if (nil == dic) {
[dic setValue:[NSString stringWithFormat:@"%d",count] forKey:s];
}else if ((int)[dic valueForKey:s] < count) {
// 移除元素,保证字典中只有最大值的元素
[dic removeAllObjects];
[dic setValue:[NSString stringWithFormat:@"%d",count] forKey:s];
}
}
NSLog(@"%@",dic);
}
// 二、获取每个字符出现的次数
void searchEachString_count(NSString *string) {
// 1.获取字符串长度
int len = (int)string.length;
// 2.创建字典
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// 3.for循环取出每一个字符
for (int i=0; i<len; i++) {
// 4.计数器,存储字符出现的次数
int count = 0;
// 5.取出单个字符
NSRange range = {i,1};
NSString *s = [string substringWithRange:range];
// 6.内层循环,比较字符,相同时,计数器+1
for (int j=0; j<len; j++) {
// 7.取出单个字符
NSRange range = {j,1};
NSString *c = [string substringWithRange:range];
// 8.字符比较
if ([s isEqualToString:c]) {
count++;
}
}
// 9.保存每一组字符及出现的次数
[dic setValue:[NSString stringWithFormat:@"%d",count] forKey:s];
}
NSLog(@"%@",dic);
}