#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include "OJ.h"
typedef struct char_Node
{
char letter;
int count;
}charNode;
void Init_AllcharNodes(void); //内部函数用来初始化存储内存
charNode g_cNode[100];
// 功能:输入待统计字符串供用户统计
// 输入:char* pInput 待统计的字符串
// 输出:无
// 返回:无
void InputString(char* pInput)
{
int i = 0;
int flag = 0;
if(NULL == pInput)
return;
Init_AllcharNodes();
while( *pInput != '\0')
{
if( (*pInput >= '0' && *pInput<= '9') || (*pInput >= 'a' && *pInput<= 'z') || (*pInput >= 'A' && *pInput<= 'Z')\
|| (*pInput == ' '))
{
for(i = 0;i<100 ;i++) //有该字符
{
if(g_cNode[i].letter == *pInput)
{
g_cNode[i].count = g_cNode[i].count+1;
flag = 1;
break;
}
}
if(0 == flag)
{
for(i = 0;i<100;i++) //没有该字符,进行分配
{
if((g_cNode[i].letter == '\0') && (g_cNode[i].count == 0) )
{
g_cNode[i].letter = *pInput;
g_cNode[i].count = 1;
break;
}
}
}
}
else
;
flag = 0;
pInput++;
}//end while()
}
// 功能:获取前面输入的字符串的统计信息
// 输入:无
// 输出:char* *pInput 获取统计结果,内存由函数自己申请,在函数外部释放,如果没有统计信息,返回NULL
// 返回:int 如果成功返回1,失败返回0
int GetStaticString(char* *pInput)
{
int i = 0,j = 0;
int count_temp = 0;
char letter_temp = '\0';
*pInput = (char*)malloc(sizeof(char)*100);
if(NULL == *pInput)
return 0;
for(i = 0;i< 100;i++)
{
(*pInput)[i] = '\0';
}
for(i = 0;i< 100-1 ;i++) //使用选择排序法,将要进行输出的字母进行从大到小排序
{
for(j = i+1 ;j < 100 ;j++)
{
if( g_cNode[i].count < g_cNode[j].count )
{
letter_temp = g_cNode[i].letter;
g_cNode[i].letter = g_cNode[j].letter;
g_cNode[j].letter = letter_temp;
count_temp = g_cNode[i].count;
g_cNode[i].count = g_cNode[j].count;
g_cNode[j].count = count_temp;
}
else if(g_cNode[i].count == g_cNode[j].count)
{
if(g_cNode[i].letter > g_cNode[j].letter)
{
letter_temp = g_cNode[i].letter;
g_cNode[i].letter = g_cNode[j].letter;
g_cNode[j].letter = letter_temp;
count_temp = g_cNode[i].count;
g_cNode[i].count = g_cNode[j].count;
g_cNode[j].count = count_temp;
}
}
}
}
for(i = 0;i< 100;i++)
{
if( ( g_cNode[i].letter != '\0') && (g_cNode[i].count != 0) )
{
(*pInput)[i] = g_cNode[i].letter;
}
}
if(g_cNode[0].letter == '\0')
return 0;
return 1;
}
//功能:清空前面输入的字符串的统计信息
//输入:无
//输出:无
//返回:无
void Clear()
{
int i = 0;
for(i = 0;i<100;i++)
{
g_cNode[i].letter = '\0';
g_cNode[i].count = 0;
}
//memset(g_cNode, 0 ,sizeof(charNode)*100);
}
void Init_AllcharNodes(void)
{
int i = 0;
for(i = 0;i<100;i++)
{
g_cNode[i].letter = '\0';
g_cNode[i].count = 0;
}
}