C语言实现编写一个程序读入一个字符串,统计该字符串中出现的字符类型及其次数,然后输出结果。要求用一个二叉排序树保存处理结果,字符串中的每个不同字符用树中结点描述,每个结点包含四个域: 字符 该字符出现的次数 指向ASCII码小于该字符的左子树的指针 指向ASCII码大于该字符的右子树的指针
时间: 2024-02-11 07:08:29 浏览: 65
C语言实现去除字符串中空格的简单实例
好的,我来为你编写一个 C 语言程序,实现读入一个字符串,统计该字符串中出现的字符类型及其次数,然后输出结果,使用一个二叉排序树保存处理结果。
程序实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TreeNode {
char ch; // 字符
int count; // 该字符出现的次数
struct TreeNode *left; // 指向ASCII码小于该字符的左子树的指针
struct TreeNode *right; // 指向ASCII码大于该字符的右子树的指针
} TreeNode, *Tree;
void insert(Tree *root, char ch) {
if (*root == NULL) {
*root = (Tree)malloc(sizeof(TreeNode));
(*root)->ch = ch;
(*root)->count = 1;
(*root)->left = NULL;
(*root)->right = NULL;
return;
}
if (ch < (*root)->ch) {
insert(&((*root)->left), ch);
} else if (ch > (*root)->ch) {
insert(&((*root)->right), ch);
} else {
(*root)->count++;
}
}
void inorder(Tree root) {
if (root == NULL) {
return;
}
inorder(root->left);
printf("%c: %d\n", root->ch, root->count);
inorder(root->right);
}
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
Tree root = NULL;
int len = strlen(str);
for (int i = 0; i < len; i++) {
insert(&root, str[i]);
}
printf("字符类型及其次数如下:\n");
inorder(root);
return 0;
}
```
程序中首先定义了一个结构体 `TreeNode`,表示二叉排序树的节点,包含字符、出现次数、左子树和右子树四个域。
然后定义了一个 `insert` 函数,用于将一个新节点插入到二叉排序树中。如果该节点已经存在,则增加其出现次数。
接着定义了一个 `inorder` 函数,用于中序遍历二叉排序树,输出每个节点的字符和出现次数。
在主函数中,首先读入一个字符串,然后遍历字符串中的每个字符,将其插入到二叉排序树中。最后输出二叉排序树中各个节点的字符类型及其次数。
希望这个程序可以帮助到你。
阅读全文