首页 > 试题广场 >

请编写程序实现以下功能。

[问答题]
请编写程序实现以下功能。
(1)假设有一串英文文字,存储在字符串str 中。
(2)编写函数lettercount(),统计在字符串str中每个字母和数字字符出现的次数,统计结果形成一个链表,函数返回指向头结点的指针head。
(3)编写函数listcount(head),在屏幕上输出统计结果链表中,每个字母出现的次数,输出格式见示例。
要求:请使用链表实现上述两个函数的功能。
假设str初始为:  aaa	bbb	cc	sss	123	4567 abc 456 4567
屏幕输出:
a(4),b(4),c(3),s(3),1(1),2(1),3(1),4(3),5(3),6(3),7(2)
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define LEN sizeof(struct node)
struct node
{
	char l;
	int c;
	struct node *next;
};
struct node *lettercount(char str[100])
{
	struct node *p1,*p2,*head;
	char letter[100]={'\0'};
	int ci[100]={0},n1,n2=1,n=0,i,j,t=0;
	n1=strlen(str);
	letter[0]=str[0];
	for (i=1;i<n1;i++)
	{
		for (j=0;j<n2;j++)
		{
			if (str[i]==letter[j])
			{
				ci[j]=ci[j]+1;
				break;
			}
			else
				t=t+1;
		}
		if (t==n2)
		{
			n2=n2+1;
			letter[n2-1]=str[i];
		}
		t=0;
	}
	p1=p2=(struct node *)malloc(LEN);
	if (letter[0]!=' ')
	{
		p1->l=letter[0];
		p1->c=ci[0]+1;
	}
	head=NULL;
	for (i=1;i<n2+1;i++)
	{
		n=n+1;
		if (n==1)
			head=p1;
		else 
			p2->next=p1;
		p2=p1;
		p1=(struct node *)malloc(LEN);
        if (letter[i]!=' ')
		{
		    p1->l=letter[i];
		    p1->c=ci[i]+1;
		}
		else
		{
			i=i+1;
			if (i!=n2)
			{
				p1->l=letter[i];
				p1->c=ci[i]+1;
			}
		}
	}
	p2->next=NULL;
	return(head);
}
void listcount(struct node *head)
{
	struct node *p;
	p=head;
	while (p!=NULL)
	{
		printf("%c(%d) ",p->l,p->c);
		p=p->next;
	}
	printf("\n");
}
void main()
{
	struct node *head;
	char str[100]={"aaa bbb cc   sss  123 4567 abc 456 4567"};
	head=lettercount(str);
	listcount(head);
}

这道题你会答吗?花几分钟告诉大家答案吧!