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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /*
  2. main.m
  3. 输入字符串,统计A、B、C、D出现次数,由高到低输出字母和次数
  4. 分析:
  5. 由高到低输出字母和次数,指的是什么?
  6. 1)将字符串由高到低的输出(冒泡排序)
  7. 2)统计字符串里面,各个字符出现的次数-(选择)
  8. 1)统计字符串中出现哪些字符
  9. 两个相邻的字符,进行比较,不同则是字符串中出现的字符!
  10. 2)统计出现的字符,在字符串中出现几次
  11. 将出现的字符,每个都跟字符串比较,得出每个字符在字符串中出现的次数
  12. */
  13. #import <Foundation/Foundation.h>
  14. int checkArr(char ch ,char arr[],int len);
  15. void getShowNumber(char arr[],char ch[],int chLen, int arrLen);
  16. char *minArr(char ch[],int len);
  17. char *maxArr(char ch[],int len);
  18. int main(int argc, const char * argv[]) {
  19.     char ch []="aadbcd";//定义个字符串
  20.     int len = (int)strlen(ch);//获取字符串长度
  21.     char arr [len];//存放出现过的字符
  22.     int count = 0;//总共有多少个字符
  23.     //第一个字符,肯定是没有出现过
  24.     arr[0] = ch[0];
  25.     /*
  26.      统计字符串里面出现过的字符
  27.      1)两个相邻字符比较
  28.      2)已经比较好了,存在的字符,进行比较!
  29.      */
  30.     for (int i=0; i<len; i++) {
  31.         if(ch[i]!=ch[i+1] && checkArr(ch[i+1],arr,len)){
  32.             count++;//个数
  33.             arr[i]=ch[i+1];
  34.             
  35.             printf("arr[%d]=%c \n",i,arr[i]);
  36.         }
  37.     }
  38.    
  39.    
  40.     //统计字符在字符串中存在的次数
  41.     //int arrLen = (int)strlen(arr);
  42.     getShowNumber(arr, ch, len, count);
  43.    
  44.     //打印排好序的字符串(从小到大)
  45.     minArr(ch,len);
  46.     printf("%s\n",ch);
  47.    
  48.     //打印排序好的字符串(从大到小)
  49.     maxArr(ch,len);
  50.     printf("%s\n",ch);
  51.    
  52.     return 0;
  53. }
  54. /*
  55. 冒泡排序
  56. 分析:
  57. 两个相邻的元素进行比较,比较后,直接互换位置,最值放最后!
  58. 注意:
  59. for (int j=0; j<len-i...)//忽略最后面,排好序的元素
  60. ch -- 要排序的字符串
  61. len -- 字符串长度
  62. */

  63. char *maxArr(char ch[],int len){
  64.     char temp;//临时存放的变量
  65.     for (int i = 0; i<len; i++) {
  66.         for (int j=0; j<len-i; j++) {//求最值
  67.             if(ch[j]<ch[j+1]){
  68.                 temp = ch[j];
  69.                 ch[j] = ch[j+1];
  70.                 ch[j+1] = temp;
  71.             }
  72.         }
  73.     }
  74.     return ch;
  75. }
  76. /*
  77. 选择排序
  78. 分析:
  79. 假设个元素为最小值,把这个元素,拿来和其他的字符比较
  80. 得到最值的下标,然后进行互换位置,最值放最前
  81. ch -- 需要排序的字符串
  82. len -- 字符串长度
  83. 注意:
  84. //去除已经排序好的元素
  85. //假设一个元素为最值!
  86. int minIndex = i;
  87. for(int j= i ...)
  88. */
  89. char *minArr(char ch[],int len){
  90.     char temp;//临时存放的变量
  91.     for (int i = 0; i<len; i++) {
  92.         int minIndex = i;//这是i,去除已经排序好得!
  93.         for (int j = i; j<len; j++) {//求最值
  94.             if(ch[minIndex]>ch[j]){
  95.                 minIndex = j;
  96.             }
  97.         }
  98.         
  99.         temp = ch[minIndex];
  100.         ch[minIndex] = ch[i];
  101.         ch[i] = temp;
  102.     }
  103.     return ch;
  104. }

  105. /*
  106. 比较字符是否相同
  107. ch - 要比较的字符
  108. arr - 跟字符串比较(已经存在的字符)
  109. len - 字符串长度
  110. */
  111. int checkArr(char ch ,char arr[],int len){
  112.     int temp = 1;
  113.     for (int i = 0; i<len; i++) {
  114.         if(ch == arr[i]){//相同为0
  115.             temp = 0;
  116.             break;
  117.         }
  118.     }
  119.     return temp;
  120. }

  121. /*
  122. 打印字符串arr里面每个字符,在字符串ch里面出现的次数
  123. arr - 出现的字符串
  124. ch - 原始的字符串
  125. chLen - 原始字符串长度
  126. arrLen - 出现字符串长度
  127. */
  128. void getShowNumber(char arr[],char ch[],int chLen, int arrLen){
  129.    
  130.     for (int i = 0; i<arrLen; i++) {
  131.         int count = 0 ;
  132.         for (int j = 0 ; j<chLen; j++) {
  133.             if (arr[i] == ch[j]) {
  134.                 count++;
  135.             }
  136.         }
  137.         printf("%c在字符串中出现%d次\n",arr[i],count);
  138.     }
  139. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马