📄 最大字符平台.cpp
字号:
/*计算机071 冯一超编写的打印最大字符平台
原创程序
程序说明:程序获取一个字符创放到一个字符数组中
从第一个字符开始扫描,将每一个字符平台放到一个节点,按顺序链接成链表,同时用一个外部变量max记录最大字符平台的长度
打印时以max为标准打印符合条件的字符平台
例如:aabbbcdddee
链表的存储结构为 aa->bbb->c->ddd->e 最大字符平台为bbb ddd
*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MAXLEN 100
int max=0;//定义一个外部变量,记录已经扫描过的字符串的最大字符平台的字符数
typedef struct //定义字符串
{
char ch[MAXLEN];
int len;
}SString;
typedef struct Node //定义一个链表,用于储存一个字符平台的信息,若字符平台中只有一个字符,则单独享用一个节点
{
char elem; //字符平台中存放的字符
int poss; //字符平台的位置
int len; //字符平台的长度
struct Node *next;
}info;
info *f(SString *s)
{
int i;
info *HeadNode =(info *)malloc(sizeof(Node));//建立链表头结点
HeadNode->elem=s->ch[0];//头结点中的字符为字符创的第一个字符
HeadNode->poss=0;//头结点的位置为0
HeadNode->len=1;//头结点的当前长度唯一
max=1;//外部变量max当前等于头结点内元素的个数1
info *rear=HeadNode;//rear指针始终指向链表的最后一个节点
rear->next=NULL;
for (i=1;i<s->len;i++)//循环从字符串的第二个字符开始到最后一个字符结束
{
if(s->ch[i-1]==s->ch[i])//如果后一个字符与前一个字符相同,则不创建节点
{
rear->len++;//当前节点的长度加1
if(rear->len>=max)//如果当前节点内的字符平台的长度大于已经扫描过的字符串中最大字符平台的长度
max=rear->len;//则外部变量max改变为当前字符平台的长度
}
else//如果后一个字符与前一个字符不同
{
info *NewNode=(info *)malloc(sizeof(Node));//开辟一个新的节点
NewNode->elem=s->ch[i];//元素为当前元素
NewNode->poss=i;//位置为当前元素的位置
NewNode->len=1;//长度为1
rear->next=NewNode;//把这个节点链接到链表
rear=NewNode;//rear指针下移
rear->next=NULL;//链表尾部赋空
}
}
return HeadNode;//返回链表头结点
}
void show(info *l)
{
int i;
printf("最大字符平台为:\n");
info *p=l;//p从链表的第一个节点开始
while (p!=NULL)
{
if (p->len==max)//如果当前字符平台的长度等于外部变量max,即字符串的最大字符平台的长度
{
for(i=0;i<max;i++) //打印这个字符max遍,即最大字符平台
printf("%c",p->elem);
printf("\n");
p=p->next;//继续检测下一个节点
}
else
p=p->next;//否则继续检测下一个节点
}
printf("打印结束\n");
}
int main()
{
SString s;
info *l;
printf("请输入一个字符串:");
gets(s.ch);
s.len=strlen(s.ch);
l=f(&s);
show(l);
getchar();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -