A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #import <Foundation/Foundation.h>
  2. //输出一个字符串中每个字符出现的次数

  3. int main() {
  4.     NSMutableString *str = [[NSMutableString alloc] initWithFormat:@"asdkjafawfauwiufawefp"];
  5.    
  6. //    NSMutableArray *array ;
  7.     for (int i = 0;i<str.length;i++)
  8.     {
  9.         unichar c1 = [str characterAtIndex:i];
  10.       
  11.         int count =0;
  12.         for (int j = 0; j<str.length; j++)
  13.         {
  14.             unichar c2 = [str characterAtIndex:j];
  15.             if (c1 == c2)
  16.             {
  17.                 count++;
  18.             }
  19.         }
  20.         NSLog(@"%c有%d个\n",c1,count);
  21.     }
  22.     return 0;
  23. }
复制代码

倒是可以求出每个字符出现的字数,可是想了半天没解决重复的问题,麻烦大神帮个忙!非常感谢!

8 个回复

正序浏览
zx413331474 发表于 2014-12-31 18:19
楼主没有给我回复,伤不起啊,还是把我的想法发给你把,希望你转换成你的思路。
另外由于没有Xcode,具体有 ...

学习了,的确,字典应该是更好的解决方案,遍历一次直接完事
回复 使用道具 举报
告诉你一个思路:
每一个计算一个字母就把相同的字母删除(删除的同时就记录删除的次数),直到可变字符串为空
回复 使用道具 举报
楼主没有给我回复,伤不起啊,还是把我的想法发给你把,希望你转换成你的思路。
另外由于没有Xcode,具体有什么小毛病不知,楼主自己琢磨吧!!
  1. /*
  2.         需求:统计一个字符串中每个字符出现的次数。
  3.         思路:1.每个字符和出现的次数有一个对应的关系。而且字符不能重复统计
  4.                   所以用到了字典。
  5.                   2.每个字符出现的次数,即要遍历字符串,用到循环。
  6.                   3.遍历过程中发现key(字符)对应的值不存在,增加字典新元素。
  7.                   对应的值为1. 否则对应的值(次数)加1,
  8.                   
  9.        
  10. */
  11. #import <Foundation/Foundation>

  12. int main()
  13. {
  14.         NSString *str = @"dkjfeijk";
  15.         // 创建一个可变字典,用于接收数据。
  16.         NSMutableDictionary *md = [NSMutableDictionary dictionary];
  17.        
  18.         // 遍历字符串,统计每个字符出现的次数。
  19.         for(int i = 0; i<str.length; i++)
  20.         {
  21.                 // 用c记录每个出现的字符
  22.                 unichar c = [str characterAtIndex:i];
  23.                 // 将字符转换成对象
  24.                 NSNumber *numIn = [NSNumber numberWithChar:c];
  25.                 // 通过获取该字符对应的值。
  26.                 NSNumber *numCount = [NSDictionary objectForKey:numIn];       
  27.                 // 值不存在则创建一个键值对。
  28.                 if( numCount == nil)
  29.                 {
  30.                         [md setObject:@1 forKey:numIn];
  31.                 }
  32.                 else // 值存在,则相应的值+1.
  33.                 {
  34.                         int count = [numCount intValue];
  35.                         count++;
  36.                         NSNumber *countValue = [NSNumber numberWithInt:count];
  37.                         [md setObject:countValue forKey:numIn];
  38.                 }       
  39.         }
  40.         NSLog(@"%@",md);       
  41.         return 0;
  42. }
复制代码

  1. <p> </p>
复制代码

点评

好办法,谢谢分享。  发表于 2014-12-31 21:24
回复 使用道具 举报
给你一个思路,自己想吧,先想一想这是什么关系,一个字符对应一个出现的次数,
而且每个字符不能重复。没错,就是NSDictionary,字符相当于key,次数相当于value
而且key不能重复。将每一个字符做一次判断用objectforkey:字符,
如果得出的是nil,则说明没有这个key,剩下的和你的一样了。
回复 使用道具 举报
你第一个循环除了连续出现的字符不会重复插入数组,隔开的重复字符还是会重复吧...
回复 使用道具 举报
  1. #import <Foundation/Foundation.h>
  2. int main()
  3. {
  4.         NSString *str =@"dfaaggahahghf";
  5.         NSMutableArray *array = [NSMutableArray array];
  6.         //定义一个临时存放字符的变量
  7.         unichar temp = ' ';
  8.         for(int i =0;i<str.length;i++)
  9.         {
  10.                 unichar c =[str characterAtIndex:i];
  11.                
  12.                 if(temp != c)
  13.                 {
  14.                         [array addObject: c];
  15.                 }
  16.                 temp =c;
  17.         }
  18.         for(int j=0;j<array.count;i++)
  19.         {
  20.                 int count =0;
  21.                 for(int m=0;m<str.length;m++)
  22.                 {
  23.                         unichar c1 =[str chararcterAtIndex:i];

  24.                         if(c1==array[i])

  25.                         count++;
  26.                 }
  27.                 NSLog(@"%c---%d",array[i],count);
  28.         }


  29.         return 0;
  30. }
复制代码




我不知道有没有语法错误不,我没XCODE,没法给验证,我感觉我的思路是对的。第一步:我先把字符串中的每个字符挑选出来。

第二步:在遍历字符串判断。

最简单的方式应该是遍历一次,直接算出来的。水平不到,想不到那么深
回复 使用道具 举报
急求,在线等,各位来帮个忙呀~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马