@T求出字符串中出现次数最多的那个字母以及出现的次数
[😂如想转载,请附上链接]添]https://blog.csdn.net/qq_37978862/article/details/103671451
所需头文件
#include<stdio.h>
#include<stdlib.h>
存放数据的链表
typedef struct node
{
char ch; //存放字母
int count1;//存放字母出现的次数
struct node *next;
}node_t;
具体实现代码:
int main()
{
char a[] =" fffff"; //可改为手动输入
int i,j;
int n=sizeof(a)/sizeof(char)-1;
int count;
int flag=0;
//创建链表并赋初值
node_t *h = (node_t *)malloc(sizeof(node_t));
h->next = NULL;
node_t *p = h;
node_t *new;
//开始遍历
for(i=0;i<n;i++)
{
count=1;
if(flag) //从第二个字母开始依次开始检查
{
if(a[i]=='0') //证明 这个字母之前出现过
{
continue;
}
}
for(j=1+i;j<n;j++)
{
if(a[i]==a[j]) //出现的第二个相同的字母置零
{
count++; //后面出现一次,次数加1,
a[j]='0';//并把出现的相同的字母置零
}
}
//初始化新节点
new=(node_t *)malloc(sizeof(node_t));
new->ch = a[i]; //将字母和出现的次数挂在链表上
new->count1 = count;
new->next = p->next; //防止数据丢失
//先把p后面的节点挂在new上
p->next = new;
p = new;
flag=1;
}
//zm 代表字母,cs代表字母出现的次数
//此时链表上插满了 这个字符串中每个字母及他们出现的次数
p = h; //p回到表头
p = p->next;
char zm = p->ch ;
int cs = p->count1;
while(p!=NULL)
{
if(cs<p->count1) //假设链表
{
zm = p->ch;
cs = p->count1;
}
p=p->next;
}
printf("zi mu:%c\nci shu:%d\n",zm,cs);
}