#include
intmain()
{
chars[50],s1[100];
inti=0,j=0,k,n;
gets(s);//输入压缩后的字符串
while(s[i])
{
s1[j]=s[i];
//因为形式是先字符后数字,所以第一个肯定是字符,先赋入另一个数组以便后续操作。
i++;j++;//递增,开始处理下一位的数字
n=0;
while(s[i]>='0'&&s[i]<='9')//只要是数字就要进入循环统计
{
n*=10;
n+=s[i]-'0';
i++;
}
for(k=0;k //因为解压缩的字符已经存入数组s1,所以只剩下n-1要再放入s1 s1[j+k]=s1[j-1]; if(n>0)//注意,一定要n>0因为有可能是连续字符,本来就没被压缩这时如果还把j加上n-1就反而是让j减小了。 j+=n-1; } s1[j]='\0';//处理结束后,最后一个设为空字符结束。 printf("%s\n",s1); return0; } 扩展资料 C语言:数据结构-稀疏矩阵的压缩存储 稀疏矩阵的压缩存储原理,只存储非零元素ai,j和相应的行、列序号i、j。具体方法:对稀疏矩阵中每一个非零元素设定一个三元组(i,j,ai,j)。 将所有三元组按行优先排列,组成一个三元组表(线性表)。只要存储三元组表和该矩阵的行、列数,就能唯一确定该矩阵。
如果数据结构是数组的话,主要是要解决两个问题,一是统计重复的字符,二是确定数组压缩后每个元素在数组中所处的位置。
可以用一个指针遍历数组,另一个指针标记存储位置。
字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s="a1a2···an"(n>=0)。它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。