黑马程序员技术交流社区
标题:
基础测试题--依次从高到低输出A B C D和次数
[打印本页]
作者:
Fench
时间:
2015-4-10 16:04
标题:
基础测试题--依次从高到低输出A B C D和次数
从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。
调试了一下午 终于弄出来了, 开心 分享下~ 有什么BUG欢迎各位提出
#include <stdio.h>
int main()
{
char *str = NULL;
int arr[] = {0, 0, 0, 0};
int i, j;
int temp;
int a, b, c, d;
a = b = c = d = 0;
str = (char *)malloc(255);
gets(str);
// 统计A B C D 出现次数, 并分别计数
// a b c d 分别统计A B C D 的个数
// 将A B C D的个数分别赋值给数组元素
while(*str != '\0')
{
switch(*str)
{
case 'A':
arr[0]++;
a++;
break;
case 'B':
arr[1]++;
b++;
break;
case 'C':
arr[2]++;
c++;
break;
case 'D':
arr[3]++;
d++;
break;
default :
break;
}
str++;
}
// printf("a = %d, b = %d, c = %d, d = %d \n", a, b, c, d); for Debug
// 将数组中A B C D 按出现个数从大到小排列
for(j = 0; j < 4; j++)
{
for(i = 0; i < 4-j; i++)
{
if(arr[i] < arr[i+1])
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
/* Debug Start
for(i = 0; i<4; i++)
{
printf("%c = %d", 'A'+ i, arr[i]);
}
printf("\n");
Debug End */
// 依次判断从大到小出现个数是那个字母,并打印在屏幕上(即判断a[0](最大)与a,b,c,d比较相等就打印出来)
for(i=0; i<4; i++)
{
if(arr[i] == a)
{
printf("A-%d ", arr[i]);
a++;
}
else if(arr[i] == b)
{
printf("B-%d ", arr[i]);
b++;
}
else if(arr[i] == c)
{
printf("C-%d ", arr[i]);
c++;
}
else if (arr[i] == d)
{
printf("D-%d ", arr[i]);
d++;
}
}
free(str);
return 0;
}
复制代码
作者:
Nicholas_Chow
时间:
2015-4-10 16:09
记录出现次数简单,后面按出现次数由高到低输出字母确实有点难度
用数组记录出现次数,再用4个变量再记录一次,数组排序后,跟这4个变量比较来控制输出顺序,好思路。
作者:
Fench
时间:
2015-4-10 16:12
Nicholas_Chow 发表于 2015-4-10 16:09
记录出现次数简单,后面按出现次数由高到低输出字母确实有点难度
用数组记录出现次数,再用4个变量再记录 ...
还有一个问题哦... 那就是相等的情况. 我就被这个问题卡了很久很久.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2