黑马程序员技术交流社区

标题: 一道笔试题的两种解法,大家觉得那个更好呢 [打印本页]

作者: jdc123    时间: 2016-5-29 22:41
标题: 一道笔试题的两种解法,大家觉得那个更好呢
  1. /*
  2.   题目要求:
  3. 控制台输入一个字符串
  4. 对字符串进行过滤,只保留其中的英文字母,生成新字符串
  5. 统计新字符串中每个英文字母的出现次数
  6. */
  7. #import <Foundation/Foundation.h>

  8. int main(int argc, const char * argv[]) {
  9.     @autoreleasepool {
  10.         char ch[100];
  11.         char newCh[100];
  12.         printf("请输入一个字符串");
  13.         gets(ch);
  14.         int len = (int)strlen(ch);
  15.         for (int i = 0,j=0; i <=len; i++) {
  16.             if ((ch[i]>64&&ch[i]<91)||(ch[i]>96&&ch[i]<123)) {
  17.                 newCh[j] = ch[i];
  18.                 j++;
  19.             }else if (ch[i] == '\0') {
  20.                 newCh[j] = ch[i];
  21.             }
  22.         }
  23.         printf("%s\n",newCh);
  24. //-------------------统计重复字母次数方法1---------------------
  25.         //使用选择排序法逐个比较字符串中的字母
  26.         for (int i=0; i<strlen(newCh); i++) {
  27.             int count=1;
  28.             for (int j=i+1; j<=strlen(newCh); j++) {
  29.                 if (newCh[i]==newCh[j]) {
  30.                     newCh[j]+=58;//让重复的字母变为不是字母
  31.                     count++;
  32.                 }
  33.                
  34.             }
  35.             //避免重复的字母重复统计
  36.         if ((newCh[i]>64&&newCh[i]<91)||(newCh[i]>96&&newCh[i]<123)) {
  37.              NSLog(@"%c的出现次数为%d",newCh[i],count);
  38.             }
  39.         }
  40.             }
  41.     return 0;
  42. }

  43. //-------------统计字重复字母数的方法2-----------------        
  44.         // 存储字母出现次数的数组
  45.         int count[26];
  46.         length = (int)strlen(newCh);
  47.         // 遍历数组统计字母出现次数
  48.         for (int i = 0; i < 26; i++) {
  49.             // 先对数组元素进行初始化
  50.             count[i] = 0;
  51.             for (int j = 0; j < length; j++) {
  52.                 if (newCh[j] == 65 + i || newCh[j] == 97 + i) {
  53.                     count[i]++;
  54.                 }
  55.             }
  56.         }
  57.         
  58.         // 输出结果
  59.         printf("The new string is: %s\n", newStr);
  60.         for (int i = 0; i < 26; i++) {
  61.             if (count[i] != 0) {
  62.                 printf("The count of \'%c\' and \'%c\' is: %d\n", 65 + i, 97 + i, count[i]);
  63.             }
  64.         }
  65.         
  66.     }
  67.     return 0;
  68. }
复制代码

作者: jdc123    时间: 2016-5-29 23:19
兄弟们给个回复吧
作者: 2528    时间: 2016-5-31 07:50
第二种,清晰。
作者: jdc123    时间: 2016-5-31 12:52
2528 发表于 2016-5-31 07:50
第二种,清晰。

好吧,虽然第一种是我的解法,而且我认为我的解法更有效率,但还是接收你的看法
作者: vivi342863    时间: 2016-5-31 18:44
感觉各有各的好处吧.都不错.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2