编写一个控制台的工程,程序可以对用户任意输入的字符串中的字符进行统计,统计出字符、标点、数字出现的次数。根据用户输入的字符构建一个二叉排序树的动态查找表,key为字符的ACSII码,count值为该字符出现的次数。
二叉排序树字符统计源代码
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MAX_LENGTH 255
typedef struct BSTreeNode {
char ch;
int count;
struct BSTreeNode* lchild;
struct BSTreeNode* rchild;
}BSTNode;
void CreateBSTree(BSTreeNode*& BT, char ch) {
if (BT == NULL) {
BT = (BSTNode*)malloc(sizeof(BSTNode));
BT->ch = ch;
BT->count = 1;
BT->lchild = BT->rchild = NULL;
}
else if (ch == BT->ch)
BT->count++;
else if (ch < BT->ch)
CreateBSTree(BT->lchild, ch);
else
CreateBSTree(BT->rchild, ch);
}
void InOrderTraverse(BSTNode* BT) {
if (BT != NULL) {
InOrderTraverse(BT->lchild);
printf("%c->[%d]\n", BT->ch, BT->count);
InOrderTraverse(BT->rchild);
}
}
void DestroyBSTree(BSTNode* BT) {
if (BT != NULL) {
DestroyBSTree(BT->lchild);
DestroyBSTree(BT->rchild);
free(BT);
}
}
int main() {
BSTNode* BT = NULL;
int i = 0;
char str[MAX_LENGTH];
printf("请输入字符串:\n");
gets_s(str);
while (str[i] != '\0') {
CreateBSTree(BT, str[i]);
i++;
}
printf("每个字符出现的次数:\n");
InOrderTraverse(BT);
printf("\n");
DestroyBSTree(BT);
return 0;
}