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");
}