黑马程序员技术交流社区
标题:
关于统计字符串中字母出现的次数并按降序排序
[打印本页]
作者:
4B青年
时间:
2015-7-2 23:28
标题:
关于统计字符串中字母出现的次数并按降序排序
本帖最后由 4B青年 于 2015-7-2 23:30 编辑
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
//定义一个数组用来存放输入的字符串
char array[100];
//提示用户输入一个字符串
printf("请输入一个字符串:\n");
//接收用户输入的字符串
scanf("%s",array);
//定义四个变量用来存放ABCD出现的次数
int a=0,b=0,c=0,d=0;
//定义变量存放字符串的长度
unsigned long len=strlen(array);
//通过for循环遍历数组元素
for (int i=0;i<len;i++){
//统计A出现的次数
if(array[i]=='A'){
a++;
}
//统计B出现的次数
else if(array[i]=='B'){
b++;
}
//统计C出现的次数
else if(array[i]=='C'){
c++;
}
//统计D出现的次数
else if(array[i]=='D'){
d++;
}
}
//定义一个数组Num用来存放ABCD出现的次数
int Num[4]={a,b,c,d};
//定义变量用于临时存放数组元素
int temp;
//冒泡排序法
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
{
if(Num[j]<Num[j+1]){
//当前一个数组元素小于后一个数组元素时,交换它们的位置
temp=Num[j];
Num[j]=Num[j+1];
Num[j+1]=temp;
}
}
}
//定义一个数组mark用来存放ABCD标志
char mark[4];
//将数组Num与数组mark的出现次数和标志一一对应
for(int i=0;i<4;i++){
//如果出现a次,则mark[i]='A'
if(Num[i]==a && mark[0]!='A' && mark[1]!='A' && mark[2]!='A' && mark[3]!='A'){
mark[i]='A';
}
//如果出现b次,则mark[i]='B'
else if(Num[i]==b && mark[0]!='B' && mark[1]!='B' && mark[2]!='B' && mark[3]!='B'){
mark[i]='B';
}
//如果出现c次,则mark[i]='C'
else if(Num[i]==c && mark[0]!='C' && mark[1]!='C' && mark[2]!='C' && mark[3]!='C'){
mark[i]='C';
}
//如果出现d次,则mark[i]='D'
else
{
mark[i]='D';
}
}
//降序打印输出每个字母出现的次数
for(int i=0;i<4;i++)
printf("%c出现%d次\n",mark[i],Num[i]);
return 0;
}
复制代码
作者:
4B青年
时间:
2015-7-2 23:32
有人知道第14行代码为什么用unsigned long定义类型吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2