admin 管理员组

文章数量: 1086019


2024年3月7日发(作者:left函数提取日期)

背景:

压缩是一种有效的减小数据量的方法,目前已经被广泛应用于各种类型的信息系统之中。

一种压缩文本文件(假设文件中不包含数字)的方法如下:

1. 原始文本文件中的非字母的字符,直接拷贝到压缩文件中;

2. 原始文件中的词(全部由字母组成),如果是第一次出现,则将该词加入到一个词的列表中,并拷贝到压缩文件中;否则该词不拷贝到压缩文件中,而是将该词在词的列表中的位置拷贝到压缩文件中。

3. 词的列表的起始位置为 1 。 词的定义为文本中由大小写字母组成的最大序列。大写字母和小写字母认为是不同的字母,即 abc 和 Abc 是不同的词。词的例子如下:

x-ray 包括两个词 x 和 ray;mary's 包括两个词 mary 和 s;a c-Dec 包括三个词 a

和 c 和 Dec 编写一个程序,输入为一组字符串,输出为压缩后的文本。

输入:

输入为一段文本,可以假设输入中不会出现数字、每行的长度不会超过 80 个字符,并且输入文本的大小不会超过 10M。

输出:

压缩后的文本。

期待的输出

时间限制

内存限制

额外进程

测试输入

以文本方式显示 以文本方式显示

 Please, please do it--4 would 2 Mary

very,↵

 7 much.↵

 ↵

Thanks↵

 Please, please do it--it

would please Mary very,↵

测试用例 1

 very much.↵

 ↵

Thanks↵

#include

#include

int j=1;

void ACT(char b[])

{ int i,s=0;

static char a[10000][50];

for(i=1;i

if(strcmp(a[i],b)==0){printf("%d",i);s=1;break;}

if(s==0){printf("%s",b);if(b[0]!='0'){strcpy(a[j],b);j++;}}

return ;

}

int main()

{

int k=0;

char b[10000][50],s1;

while((s1=getchar())!=EOF)

{

if((s1>='a'&&s1<='z')||(s1>='A'&&s1<='Z')){b[j][k]=s1;k++;}

else if(s1=='0'){b[j][k]='0';ACT(b[j]);k=0;printf("n");}

else {b[j][k]='0';ACT(b[j]);k=0;printf("%c",s1);}

}

}


本文标签: 文本 输入 不会 假设 小写字母