黑马程序员技术交流社区
标题:
输入字符串,统计A、B、C、D的出现次数,出现次数由高到低输出字母和出现次数。
[打印本页]
作者:
tangbinbin
时间:
2015-8-16 11:10
标题:
输入字符串,统计A、B、C、D的出现次数,出现次数由高到低输出字母和出现次数。
#include <stdio.h>
#include <string.h>
// 定义一个主函数,作为程序的入口
int main()
{
// 定义一个数组str用来存放输入的字符串
char str[100];
// 提示输入一个字符串
printf("please input a string:\n");
// 接收输入的字符串,并赋值给数组str
gets(str) ;
// 定义两个变量用于for循环条件变量
int i,j;
// 定义四个变量用来存放ABCD出现的次数
int a = 0;
int b = 0;
int c = 0;
int d = 0;
// 定义变量length用来存放输入字符串的长度
unsigned long length = strlen(str);
// 定义for循环,当i小于字符串长度时,执行循环体,i加1
for (i = 0; i<length; i++)
{
// 统计A出现的次数
if (str[i] == 'A')
{
a++;
}
// 统计B出现的次数
else if (str[i] == 'B')
{
b++;
}
// 统计C出现的次数
else if (str[i] == 'C')
{
c++;
}
// 统计D出现的次数
else if (str[i] == 'D')
{
d++;
}
}
// 定义一个数组sort用来存放ABCD出现的次数
int sort[] = {a,b,c,d};
// 定义temp用于冒泡排序标记排序趟数
int temp;
// 冒泡排序 将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
for (i = 0; i<4; i++)
for(j = i+1;j<4;j++)
if (sort[i] < sort[j])
{
// 当前一个元素小于后一个元素时,交换它们的位置
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}
// 遍历排序数组
for (i = 0; i<4; i++)
{
// 如果出现a次,则打印A出现的次数
if(sort[i] == a )
{
printf("A出现%d次\n",a);
}
// 如果出现b次,则打印B出现的次数
else if(sort[i] == b)
{
printf("B出现%d次\n",b);
}
// 如果出现c次,则打印C出现的次数
else if(sort[i] == c)
{
printf("C出现%d次\n",c);
}
// 如果出现d次,则打印D出现的次数
else if(sort[i] == d)
{
printf("D出现%d次\n",d);
}
}
}
作者:
墨琰
时间:
2015-8-16 23:12
不错不错
作者:
984326157
时间:
2015-8-17 00:01
#include <stdio.h>
//定义一个字母计数器结构体,一个放字母,一个计数
typedef struct {
char letter;//存放字母A或B或C或D
int count;//字母A或B或C或D的统计个数
}letterCounter;
int main(int argc, const char * argv[]) {
// 定义一个字母计数器数组,分别为ABCD的计数器,初始计数为0
letterCounter counters[]={{'A',0},{'B',0},{'C',0},{'D',0}};
// 输入字符串,并统计个数
printf("请输入一串字符:\n");
char temp = getchar();
while (temp != '\n') {
switch (temp) {
case 'A':
counters[0].count ++;
break;
case 'B':
counters[1].count ++;
break;
case 'C':
counters[2].count ++;
break;
case 'D':
counters[3].count ++;
break;
default:
break;
}
temp = getchar();
}
//根据字母计数器中count成员变量的大小对字母计数器数组排序
for (int i = 0; i < 4; i++) {
for (int j = i; j < 4; j++) {
if (counters[i].count < counters[j].count) {
letterCounter temp;
temp = counters[i];
counters[i] = counters[j];
counters[j] = temp;
}
}
}
// 按顺序输出字母计数器数组中的字母和计数
for (int i = 0; i < 4; i++) {
printf("%c = %d\n",counters[i].letter,counters[i].count);
}
return 0;
}
复制代码
作者:
tangbinbin
时间:
2015-8-17 08:45
墨琰 发表于 2015-8-16 23:12
不错不错
多多学习交流哈
作者:
15532158132
时间:
2015-11-11 15:33
加油非常顶
作者:
于鸿鹏
时间:
2015-11-11 16:49
瞅瞅看看
作者:
cube川
时间:
2015-11-11 18:23
冒泡排序咩
作者:
cherrycool
时间:
2015-11-29 11:00
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
char str[1000] ;
char *p = str;
int a =0,b=0,c=0,d=0;
printf("请输出字符串\n");
gets(str);
for (p=str; p<&str[strlen(str)]; p++) {
printf("%c\t",*p);
switch (*p) {
case 'A':
a++;
break;
case 'B':
b++;
break;
case 'C':
c++;
break;
case 'D':
d++;
break;
}
}
printf("\n");
printf("%d,%d,%d,%d\n",a,b,c,d);
return 0;
}
复制代码
作者:
lujia1010
时间:
2015-11-29 12:42
经典的题,重点很多
作者:
Newbee_123
时间:
2015-12-5 21:47
加油,非常顶
作者:
AGHM0312
时间:
2015-12-5 22:08
嘿嘿嘿,我是来取经的
作者:
神陪我流浪
时间:
2015-12-5 22:09
不错不错
作者:
长厢厮守℡
时间:
2015-12-6 12:29
可以定义一个字符数组保存ABCD,出现次数比较交换位置之后,对应的字母也交换。这样是不是代码简单一些。?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2