1. 首页 > 科技

C++字符串压缩 字符串压缩c语言

C++字符串压缩字符串压缩c语言

使用C语言实现字符串的压缩。

/*

原串: 111225555

压缩后: 312245

原串: 333AAAbbbb

压缩后: 333A4b

原串: ASXDCdddddd

压缩后: 1A1S1X1D1C6d

Press any key to continue

*/#include 

#include 

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;

}

用C写字符串压缩

void main()

{

char a[100];

int strlong;

int i=0,j=0;

gets(a);

puts(a);

while(a[i]!='\0')

{

j=i;

while(a[j+1]==a[i])

j++;

if(j-i>1){

itoa(j-i+1, a+i,10) ;

strlong=strlen(a+i) ;

strcat(a+i,a+j);

i+=strlong+1;

}

else i++;

}

puts(a);

getch();

}

C++编写一个函数对字符串做压缩处理,使字符串中重复的字符压缩成一个,并输出删除字符的个数。

如下所示,基于你的改了一下。

#include <iostream>

using namespace std;

void compress(char * s, int * all)

{

    for(int i = 0; s[i] != '\0'; i ++)

    {

        all[s[i]] ++;

    }

}

int main()

{

int all[128] = {0};

char s[100];

cin>>s;

compress(s, all);

cout<<"删除的字符:"<<endl;

for(int i = 0; i < 128; i ++)

{

    if(all[i] > 1)

    {

       cout<<(char)i<<":\t"<<all[i] - 1<<endl;

    }

}

cout<<"精简字符串:"<<endl;

for(int i = 0; s[i] != '\0'; i ++)

{

    if(all[s[i]] != -1)

    {

        cout<<s[i];

        all[s[i]] = -1;

    }

}

return 0;

}结果如下:

字符串解压缩

刚才编成了压缩的程序,不好意思,现在的可以解压了。

程序没有给你编写读写文件的内容,文件读写自已去编,那个相对就简单了,程序只介绍了实现基本功能的内容。你可以输入3A4B7D测试。

void main()

{int m=0;int j=0;

//string a;

//char c[111];

char a[111];

char b[111];

scanf("%s",a);

for(int i=0;a[i]!='\0';i++)

{ cout<<"a"<<endl;

if(a[i]-'0'>1&&a[i]-'0'<9)

{ m=a[i]-'0';}

else{b[j]=a[i];j++;}

while(m>1)

{

b[j]=a[i+1];

j++;

m--;

}

}

cout<<j<<endl;

b[j]='\0';

cout<<b<<endl;

system("pause");

}