C语言 解压缩字符串

Python012

C语言 解压缩字符串,第1张

#include<stdio.h>

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=0k<n-1k++)

//因为解压缩的字符已经存入数组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)。

将所有三元组按行优先排列,组成一个三元组表(线性表)。只要存储三元组表和该矩阵的行、列数,就能唯一确定该矩阵。

/*

原串: 111225555

压缩后: 312245

原串: 333AAAbbbb

压缩后: 333A4b

原串: ASXDCdddddd

压缩后: 1A1S1X1D1C6d

Press any key to continue

*/ #include <stdio.h>

#include <string.h>

char *CompressStr(char s[]) {

char t[255]

int i = 0,j,k = 0

while(s[i]) {

j = i + 1

while(s[i] == s[j]) ++j

t[k++] = j - i + '0'

t[k++] = s[i]

i = j

}

t[k] = '\0'

strcpy(s,t)

return s

}

int main(void) {

char i,s[][20] = {"111225555","333AAAbbbb","ASXDCdddddd"}

for(i = 0 i < 3 ++i) {

printf("原串: %s\n",s[i])

printf("压缩后: %s\n",CompressStr(s[i]))

}

return 0

}

#include <stdio.h>

void stringZip(const char

*pInputStr, long lInputLen, char *pOutputStr)

{ int n=1

char c,*p1=pInputStr,*p2=pOutputStr

while(*p1)

{

 c=*(p1++)

 while(*p1==c){n++p1++}

 if(n>1)

 {

  if(n>999){*(p2++)=48+n/1000n/=10}

  if(n>99){*(p2++)=48+n/100n/=10}

  if(n>9){*(p2++)=48+n/10n/=10}

  *(p2++)=48+n

 }

 *(p2++)=c

 n=1

}

*p2='\0'

}

void main()

{ char s1[200],s2[200]

gets(s1)

stringZip(s1,strlen(s1),s2)

puts(s2)

}