user-0 提问: 请教输出结果的解决方法

回复:
user: user-1
content: 传指针到函数里即可改变参数所指向的空间了。

user: user-0
content: 引用 3 楼 u010030181 的回复:如果仅仅是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;             }         }     }            }     非常谢谢，目前输入ABCD可以统计并且排序了，但是我想实现的是AAABCDDKKLLLafbdjfs，就是可能是任意字符，结果只对ABCD进行排序，目前程序如果出现其它字符，就会出错了！但是很感谢您提供的思想，我还没学到这块，所以暂时没有办法举一反三

user: user-0
content: 引用 2 楼 user-3 的回复:建议定义一个结构体映射，比如 typedef struct LetterMap { 	char c; 	int n; }LM; 然后在mian中定义一个结构体数组，可以固定个数的，也可以动态malloc。然后根据输入的字符在此数组中查找（可以做成函数），找到了就给对应的n++，否则就保存进数组中，然后给这个结构体数组排序，排序可以使用qsort系统函数，也可以改改你的排序函数，最后就可以输出c，也就是每个n对应的是哪个字符了。  感谢版主提供思路，我还没学到结构体映射相关知识。不过我会学到以后再回来解决这个问题的

user: user-2
content: 如果仅仅是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;             }         }     }            }

user: user-3
content: 建议定义一个结构体映射，比如 typedef struct LetterMap { 	char c; 	int n; }LM; 然后在mian中定义一个结构体数组，可以固定个数的，也可以动态malloc。然后根据输入的字符在此数组中查找（可以做成函数），找到了就给对应的n++，否则就保存进数组中，然后给这个结构体数组排序，排序可以使用qsort系统函数，也可以改改你的排序函数，最后就可以输出c，也就是每个n对应的是哪个字符了。

user: user-0
content: 有朋友帮看看程序么。