黑马程序员技术交流社区
标题:
输入字符串,统计A、B、C、D出现次数,由高到低输出字母...
[打印本页]
作者:
huh
时间:
2015-12-31 16:23
标题:
输入字符串,统计A、B、C、D出现次数,由高到低输出字母...
/*
main.m
输入字符串,统计A、B、C、D出现次数,由高到低输出字母和次数
分析:
由高到低输出字母和次数,指的是什么?
1)将字符串由高到低的输出(冒泡排序)
2)统计字符串里面,各个字符出现的次数-(选择)
1)统计字符串中出现哪些字符
两个相邻的字符,进行比较,不同则是字符串中出现的字符!
2)统计出现的字符,在字符串中出现几次
将出现的字符,每个都跟字符串比较,得出每个字符在字符串中出现的次数
*/
#import <Foundation/Foundation.h>
int checkArr(char ch ,char arr[],int len);
void getShowNumber(char arr[],char ch[],int chLen, int arrLen);
char *minArr(char ch[],int len);
char *maxArr(char ch[],int len);
int main(int argc, const char * argv[]) {
char ch []="aadbcd";//定义个字符串
int len = (int)strlen(ch);//获取字符串长度
char arr [len];//存放出现过的字符
int count = 0;//总共有多少个字符
//第一个字符,肯定是没有出现过
arr[0] = ch[0];
/*
统计字符串里面出现过的字符
1)两个相邻字符比较
2)已经比较好了,存在的字符,进行比较!
*/
for (int i=0; i<len; i++) {
if(ch[i]!=ch[i+1] && checkArr(ch[i+1],arr,len)){
count++;//个数
arr[i]=ch[i+1];
printf("arr[%d]=%c \n",i,arr[i]);
}
}
//统计字符在字符串中存在的次数
//int arrLen = (int)strlen(arr);
getShowNumber(arr, ch, len, count);
//打印排好序的字符串(从小到大)
minArr(ch,len);
printf("%s\n",ch);
//打印排序好的字符串(从大到小)
maxArr(ch,len);
printf("%s\n",ch);
return 0;
}
/*
冒泡排序
分析:
两个相邻的元素进行比较,比较后,直接互换位置,最值放最后!
注意:
for (int j=0; j<len-i...)//忽略最后面,排好序的元素
ch -- 要排序的字符串
len -- 字符串长度
*/
char *maxArr(char ch[],int len){
char temp;//临时存放的变量
for (int i = 0; i<len; i++) {
for (int j=0; j<len-i; j++) {//求最值
if(ch[j]<ch[j+1]){
temp = ch[j];
ch[j] = ch[j+1];
ch[j+1] = temp;
}
}
}
return ch;
}
/*
选择排序
分析:
假设个元素为最小值,把这个元素,拿来和其他的字符比较
得到最值的下标,然后进行互换位置,最值放最前
ch -- 需要排序的字符串
len -- 字符串长度
注意:
//去除已经排序好的元素
//假设一个元素为最值!
int minIndex = i;
for(int j= i ...)
*/
char *minArr(char ch[],int len){
char temp;//临时存放的变量
for (int i = 0; i<len; i++) {
int minIndex = i;//这是i,去除已经排序好得!
for (int j = i; j<len; j++) {//求最值
if(ch[minIndex]>ch[j]){
minIndex = j;
}
}
temp = ch[minIndex];
ch[minIndex] = ch[i];
ch[i] = temp;
}
return ch;
}
/*
比较字符是否相同
ch - 要比较的字符
arr - 跟字符串比较(已经存在的字符)
len - 字符串长度
*/
int checkArr(char ch ,char arr[],int len){
int temp = 1;
for (int i = 0; i<len; i++) {
if(ch == arr[i]){//相同为0
temp = 0;
break;
}
}
return temp;
}
/*
打印字符串arr里面每个字符,在字符串ch里面出现的次数
arr - 出现的字符串
ch - 原始的字符串
chLen - 原始字符串长度
arrLen - 出现字符串长度
*/
void getShowNumber(char arr[],char ch[],int chLen, int arrLen){
for (int i = 0; i<arrLen; i++) {
int count = 0 ;
for (int j = 0 ; j<chLen; j++) {
if (arr[i] == ch[j]) {
count++;
}
}
printf("%c在字符串中出现%d次\n",arr[i],count);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2