请问输出结果的解决办法
请教输出结果的解决方法
该程序首先是要求用户输入A,B,C,D 四个字母进行统计各个字母输入的数量,然后再进行从小到大排序。 这两个功能以上代码都已经实现了,现在关键是:排序出来只有各字母的数量,没有对应哪个字母数量是谁的
例如运行该程序,输入:AAAABBBDDC
结果输出:
1
2
3
4
现在我需要输出结果对应的数量,是哪个字母的? 刚刚接触函数和数组,想了很久,不知道怎么样输出数字的同时,也可以输出字母。好像函数只能返回一个值的
麻烦大家帮帮忙,谢谢了
------解决思路----------------------
建议定义一个结构体映射,比如
然后在mian中定义一个结构体数组,可以固定个数的,也可以动态malloc。然后根据输入的字符在此数组中查找(可以做成函数),找到了就给对应的n++,否则就保存进数组中,然后给这个结构体数组排序,排序可以使用qsort系统函数,也可以改改你的排序函数,最后就可以输出c,也就是每个n对应的是哪个字符了。
------解决思路----------------------
如果仅仅是ABCD的话,仅供参考!!!注:如果输入有误,将得不到正确的结果,这个自己可以再进行判断……
#include <stdio.h>
int sequence_size(int sequence_array[],int length);
int main(void)
{
//定义一个字符变量
char ch;
int sumaa = 0,sumbb = 0,sumcc = 0,sumdd = 0;
//输入一个字符串
//判断是否存在A,B,C,D
while ((ch = getchar()) != '\n')
{
if (ch == 'A')
//如果存在指定字符,则放进一个变量里存储
sumaa = sumaa + 1;
else if (ch == 'B')
//如果存在指定字符,则放进一个变量里存储
sumbb = sumbb + 1;
else if (ch == 'C')
//如果存在指定字符,则放进一个变量里存储
sumcc = sumcc + 1;
else if (ch == 'D')
//如果存在指定字符,则放进一个变量里存储
sumdd = sumdd + 1;
}
//定义一个新的数组,并调用出A-D的输入次数,赋值到数组的元素中
int sequence_array[4] = {sumaa,sumbb,sumcc,sumdd};
//计算出数组的总长度
int length = sizeof(sequence_array)/sizeof(int);
//定义一个新的函数,使用冒泡算法对数组元素的大小值进行排序
sequence_size(sequence_array,length);
//遍历数组所有元素
for (int count = 0;count < length;count++)
{
printf ("%c = %d\n",alpha,sequence_array[count]);
}
return 0;
}
//使用冒泡算法对数组元素进行比较并按照从小到大进行排序
int sequence_size(int sequence_array[],int length)
{
int i,j,k;
//根据main函数里定义的数组:遍历遍历数组
for (j = 1;j < length;j++)
{
//逐个循环遍历相邻的两个数
for (i = 0;i < length - j;i++)
{
//比较相邻两个数值的大小并进行交换
if (sequence_array[i] > sequence_array[i + 1])
{
k = sequence_array[i];
sequence_array[i] = sequence_array[i + 1];
sequence_array[i + 1] = k;
}
}
}
}
该程序首先是要求用户输入A,B,C,D 四个字母进行统计各个字母输入的数量,然后再进行从小到大排序。 这两个功能以上代码都已经实现了,现在关键是:排序出来只有各字母的数量,没有对应哪个字母数量是谁的
例如运行该程序,输入:AAAABBBDDC
结果输出:
1
2
3
4
现在我需要输出结果对应的数量,是哪个字母的? 刚刚接触函数和数组,想了很久,不知道怎么样输出数字的同时,也可以输出字母。好像函数只能返回一个值的
麻烦大家帮帮忙,谢谢了
------解决思路----------------------
建议定义一个结构体映射,比如
typedef struct LetterMap
{
char c;
int n;
}LM;
然后在mian中定义一个结构体数组,可以固定个数的,也可以动态malloc。然后根据输入的字符在此数组中查找(可以做成函数),找到了就给对应的n++,否则就保存进数组中,然后给这个结构体数组排序,排序可以使用qsort系统函数,也可以改改你的排序函数,最后就可以输出c,也就是每个n对应的是哪个字符了。
------解决思路----------------------
如果仅仅是ABCD的话,仅供参考!!!注:如果输入有误,将得不到正确的结果,这个自己可以再进行判断……
#include <stdio.h>
typedef struct Combination
{
int counter;
char ch;
}Combin;
int sequence_size(Combin sequence_array[],int length);
Combin arryCombin[] = {{0, 'A'}, {0, 'B'}, {0, 'C'}, {0, 'D'}};
int main(void)
{
//定义一个字符变量
char ch;
while ((ch = getchar()) != '\n' && ch >= 'A' && ch <= 'D')
{
++arryCombin[ch -'A'].counter;
}
int length = sizeof(arryCombin)/sizeof(Combin);
//定义一个新的函数,使用冒泡算法对数组元素的大小值进行排序
sequence_size(arryCombin,length);
//遍历数组所有元素
for (int count = 0;count < length;count++)
{
printf ("%c = %d\n",arryCombin[count].ch ,arryCombin[count].counter);
}
return 0;
}
//使用冒泡算法对数组元素进行比较并按照从小到大进行排序
int sequence_size(Combin sequence_array[],int length)
{
int i,j;
Combin k;
//根据main函数里定义的数组:遍历遍历数组
for (j = 1;j < length;j++)
{
//逐个循环遍历相邻的两个数
for (i = 0;i < length - j;i++)
{
//比较相邻两个数值的大小并进行交换
if (sequence_array[i].counter > sequence_array[i + 1].counter)
{
k = sequence_array[i];
sequence_array[i] = sequence_array[i + 1];
sequence_array[i + 1] = k;
}
}
}
}