⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 order.cpp

📁 输入一串字符
💻 CPP
字号:
/*输入一串字符,以“?”结束。统计各字母出现的次数,并按字母出现的多少输出
(先输出次数多的,次数相同的按字母表顺序输出,不出现的字母不输出)*/

/*思路:
运用带头节点的单链表,每次插入并排序*/

//beta 1版本(原始文件)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
	int count;
	char alph;
	struct Node* next;
};



void getalph(char a[]);//输入字符串函数
void output(Node*);//输出函数


void  main()
{
	char a[100];
    int i,flag;
    getalph(a);	//输入字符串存在数组中
	if(a[0]=='\0')
	{
		printf("你输入的字符串为空:\n");
		system("pause");
		exit(1);
	}
	
	Node *h,*p,*temp,*q,*r,*b,*head;
	head=(Node*)malloc(sizeof(Node));
	h=(Node*)malloc(sizeof(Node));
	h->alph=a[0];
	h->count=1;
	h->next=NULL;
	head->next=h;
    for(i=1;i<strlen(a);i++)
	{
		flag=0;
		temp=(Node*)malloc(sizeof(Node));
		temp->alph=a[i];
		temp->count=1;
		r=head;
		p=r->next;
		while(p!=NULL)
		{
			if(temp->alph!=p->alph)
			{
				r=p;
				p=p->next;
			}
			else
			{
				p->count++;
				flag=1;
				break;
			}

		}
		if(flag==0)//插在链表的尾端
		{
			r->next=temp;
			temp->next=NULL;
	        b=head;
			q=b->next;
            while(q!=temp)
			{
				if(temp->count>q->count)
				{
					r->next=temp->next;//交换节点,下同
					temp->next=q;//在插入节点之前,链表是排好序的,故交换一次即可
					b->next=temp;
					break;//不能漏掉,交换后指针未随节点交换
				

				}
				else if(temp->count<q->count)
				{
					b=q;
					q=q->next;
				}
				else
				{
					if(temp->alph<q->alph)
					{
						r->next=temp->next;
					    temp->next=q;
					    b->next=temp;
						break;
						

					}
					else if(temp->alph>q->alph)
					{	b=q;
					    q=q->next;
					}

				}
			}

		}
		if(flag==1)//插在链表的中间
		{
			b=head;
			q=b->next;
			while(q!=p)
			{
				if(p->count>q->count)
				{
					r->next=p->next;
					p->next=q;
					b->next=p;
					break;
					

				}
				else if(p->count<q->count)
				{
					b=q;
					q=q->next;
				}
				else
				{
					if(p->alph<q->alph)
					{
						r->next=p->next;
					    p->next=q;
					    b->next=p;
						break;
				
					}
					else if(p->alph>q->alph)
					{	b=q;
					    q=q->next;
					}

				}
			}


		}

	}
	output(head);

	

}
void getalph(char a[])
{
	int i,j;
	printf("输入一串字符,以“?”结束(若无问号则以回车结束)。统计各字母出现的次数,并按字母出现的多少输出(先输出次数多的,次数相同的按字母表顺序输出,不出现的字母不输出)\n");
	printf("enter a string:\n");
	gets(a);
	for(i=0,j=0;(a[i]!='\0')&&(a[i]!='?');i++)
	{
		if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))//滤除a到z外其他字符
		{
			a[j]=a[i];
			j++;
		}
		else
			continue;

	}
	a[j]='\0';
	
	
}

void output(Node* head)
{
    Node *h;
	h=head->next;
	do
	{
		printf("%-5c%5d\n",h->alph,h->count);
		h=h->next;
	}while(h!=NULL);
	system("pause");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -